Lines Matching refs:hw

30 static void ipw_send_setup_packet(struct ipw_hardware *hw);
36 static void handle_received_CTRL_packet(struct ipw_hardware *hw,
403 static void do_send_fragment(struct ipw_hardware *hw, unsigned char *data, in do_send_fragment() argument
410 BUG_ON(length > hw->ll_mtu); in do_send_fragment()
415 spin_lock_irqsave(&hw->lock, flags); in do_send_fragment()
417 hw->tx_ready = 0; in do_send_fragment()
420 if (hw->hw_version == HW_VERSION_1) { in do_send_fragment()
421 outw((unsigned short) length, hw->base_port + IODWR); in do_send_fragment()
430 outw(raw_data, hw->base_port + IODWR); in do_send_fragment()
433 outw(DCR_TXDONE, hw->base_port + IODCR); in do_send_fragment()
434 } else if (hw->hw_version == HW_VERSION_2) { in do_send_fragment()
435 outw((unsigned short) length, hw->base_port); in do_send_fragment()
444 outw(raw_data, hw->base_port); in do_send_fragment()
447 outw((unsigned short) 0xDEAD, hw->base_port); in do_send_fragment()
450 writew(MEMRX_RX, &hw->memory_info_regs->memreg_rx); in do_send_fragment()
453 spin_unlock_irqrestore(&hw->lock, flags); in do_send_fragment()
458 static void do_send_packet(struct ipw_hardware *hw, struct ipw_tx_packet *packet) in do_send_packet() argument
469 fragment_data_len = hw->ll_mtu - header_size; in do_send_packet()
498 do_send_fragment(hw, pkt.rawpkt, header_size + fragment_data_len); in do_send_packet()
508 spin_lock_irqsave(&hw->lock, flags); in do_send_packet()
509 list_add(&packet->queue, &hw->tx_queue[0]); in do_send_packet()
510 hw->tx_queued++; in do_send_packet()
511 spin_unlock_irqrestore(&hw->lock, flags); in do_send_packet()
520 static void ipw_setup_hardware(struct ipw_hardware *hw) in ipw_setup_hardware() argument
524 spin_lock_irqsave(&hw->lock, flags); in ipw_setup_hardware()
525 if (hw->hw_version == HW_VERSION_1) { in ipw_setup_hardware()
527 outw(DCR_RXRESET, hw->base_port + IODCR); in ipw_setup_hardware()
529 outw(DCR_TXRESET, hw->base_port + IODCR); in ipw_setup_hardware()
532 outw(IER_TXENABLED | IER_RXENABLED, hw->base_port + IOIER); in ipw_setup_hardware()
538 unsigned short csr = readw(&hw->memregs_CCR->reg_config_and_status); in ipw_setup_hardware()
541 writew(csr, &hw->memregs_CCR->reg_config_and_status); in ipw_setup_hardware()
543 spin_unlock_irqrestore(&hw->lock, flags); in ipw_setup_hardware()
554 static struct ipw_rx_packet *pool_allocate(struct ipw_hardware *hw, in pool_allocate() argument
562 spin_lock_irqsave(&hw->lock, flags); in pool_allocate()
563 if (!list_empty(&hw->rx_pool)) { in pool_allocate()
564 packet = list_first_entry(&hw->rx_pool, in pool_allocate()
566 hw->rx_pool_size--; in pool_allocate()
567 spin_unlock_irqrestore(&hw->lock, flags); in pool_allocate()
571 ipwireless_ppp_mru(hw->network) + 2; in pool_allocate()
574 spin_unlock_irqrestore(&hw->lock, flags); in pool_allocate()
608 static void pool_free(struct ipw_hardware *hw, struct ipw_rx_packet *packet) in pool_free() argument
610 if (hw->rx_pool_size > 6) in pool_free()
613 hw->rx_pool_size++; in pool_free()
614 list_add(&packet->queue, &hw->rx_pool); in pool_free()
618 static void queue_received_packet(struct ipw_hardware *hw, in queue_received_packet() argument
640 &hw->packet_assembler[channel_idx]; in queue_received_packet()
646 (*assem) = pool_allocate(hw, *assem, length); in queue_received_packet()
664 spin_lock_irqsave(&hw->lock, flags); in queue_received_packet()
665 hw->rx_bytes_queued += packet->length; in queue_received_packet()
666 spin_unlock_irqrestore(&hw->lock, flags); in queue_received_packet()
670 packet = pool_allocate(hw, NULL, length); in queue_received_packet()
688 spin_lock_irqsave(&hw->lock, flags); in queue_received_packet()
689 list_add_tail(&packet->queue, &hw->rx_queue); in queue_received_packet()
691 hw->blocking_rx = in queue_received_packet()
692 (hw->rx_bytes_queued >= IPWIRELESS_RX_QUEUE_SIZE); in queue_received_packet()
694 spin_unlock_irqrestore(&hw->lock, flags); in queue_received_packet()
695 schedule_work(&hw->work_rx); in queue_received_packet()
704 struct ipw_hardware *hw = in ipw_receive_data_work() local
708 spin_lock_irqsave(&hw->lock, flags); in ipw_receive_data_work()
709 while (!list_empty(&hw->rx_queue)) { in ipw_receive_data_work()
711 list_first_entry(&hw->rx_queue, in ipw_receive_data_work()
714 if (hw->shutting_down) in ipw_receive_data_work()
724 if (hw->network != NULL) { in ipw_receive_data_work()
726 spin_unlock_irqrestore(&hw->lock, flags); in ipw_receive_data_work()
732 hw->network, in ipw_receive_data_work()
737 spin_lock_irqsave(&hw->lock, flags); in ipw_receive_data_work()
740 hw->rx_bytes_queued -= packet->length; in ipw_receive_data_work()
746 handle_received_CTRL_packet(hw, packet->channel_idx, in ipw_receive_data_work()
751 pool_free(hw, packet); in ipw_receive_data_work()
756 hw->blocking_rx = in ipw_receive_data_work()
757 hw->rx_bytes_queued >= IPWIRELESS_RX_QUEUE_SIZE; in ipw_receive_data_work()
758 if (hw->shutting_down) in ipw_receive_data_work()
761 spin_unlock_irqrestore(&hw->lock, flags); in ipw_receive_data_work()
764 static void handle_received_CTRL_packet(struct ipw_hardware *hw, in handle_received_CTRL_packet() argument
798 hw->control_lines[channel_idx] |= changed_mask; in handle_received_CTRL_packet()
800 hw->control_lines[channel_idx] &= ~changed_mask; in handle_received_CTRL_packet()
801 if (hw->network) in handle_received_CTRL_packet()
803 hw->network, in handle_received_CTRL_packet()
805 hw->control_lines[channel_idx], in handle_received_CTRL_packet()
810 static void handle_received_packet(struct ipw_hardware *hw, in handle_received_packet() argument
831 queue_received_packet(hw, protocol, address, data, data_len, in handle_received_packet()
835 handle_received_SETUP_packet(hw, address, data, data_len, in handle_received_packet()
841 static void acknowledge_data_read(struct ipw_hardware *hw) in acknowledge_data_read() argument
843 if (hw->hw_version == HW_VERSION_1) in acknowledge_data_read()
844 outw(DCR_RXDONE, hw->base_port + IODCR); in acknowledge_data_read()
847 &hw->memory_info_regs->memreg_pc_interrupt_ack); in acknowledge_data_read()
853 static void do_receive_packet(struct ipw_hardware *hw) in do_receive_packet() argument
861 if (hw->hw_version == HW_VERSION_1) { in do_receive_packet()
862 len = inw(hw->base_port + IODRR); in do_receive_packet()
863 if (len > hw->ll_mtu) { in do_receive_packet()
866 outw(DCR_RXDONE | DCR_RXRESET, hw->base_port + IODCR); in do_receive_packet()
871 __le16 raw_data = inw(hw->base_port + IODRR); in do_receive_packet()
878 len = inw(hw->base_port); in do_receive_packet()
879 if (len > hw->ll_mtu) { in do_receive_packet()
883 &hw->memory_info_regs->memreg_pc_interrupt_ack); in do_receive_packet()
888 __le16 raw_data = inw(hw->base_port); in do_receive_packet()
896 inw(hw->base_port); in do_receive_packet()
901 acknowledge_data_read(hw); in do_receive_packet()
908 handle_received_packet(hw, (union nl_packet *) pkt, len); in do_receive_packet()
913 static int get_current_packet_priority(struct ipw_hardware *hw) in get_current_packet_priority() argument
921 return (hw->to_setup || hw->initializing in get_current_packet_priority()
928 static int get_packets_from_hw(struct ipw_hardware *hw) in get_packets_from_hw() argument
933 spin_lock_irqsave(&hw->lock, flags); in get_packets_from_hw()
934 while (hw->rx_ready && !hw->blocking_rx) { in get_packets_from_hw()
936 hw->rx_ready--; in get_packets_from_hw()
937 spin_unlock_irqrestore(&hw->lock, flags); in get_packets_from_hw()
939 do_receive_packet(hw); in get_packets_from_hw()
941 spin_lock_irqsave(&hw->lock, flags); in get_packets_from_hw()
943 spin_unlock_irqrestore(&hw->lock, flags); in get_packets_from_hw()
954 static int send_pending_packet(struct ipw_hardware *hw, int priority_limit) in send_pending_packet() argument
959 spin_lock_irqsave(&hw->lock, flags); in send_pending_packet()
960 if (hw->tx_queued && hw->tx_ready) { in send_pending_packet()
966 if (!list_empty(&hw->tx_queue[priority])) { in send_pending_packet()
968 &hw->tx_queue[priority], in send_pending_packet()
972 hw->tx_queued--; in send_pending_packet()
979 hw->tx_queued = 0; in send_pending_packet()
980 spin_unlock_irqrestore(&hw->lock, flags); in send_pending_packet()
984 spin_unlock_irqrestore(&hw->lock, flags); in send_pending_packet()
987 do_send_packet(hw, packet); in send_pending_packet()
990 spin_lock_irqsave(&hw->lock, flags); in send_pending_packet()
992 if (!list_empty(&hw->tx_queue[priority])) { in send_pending_packet()
998 hw->tx_queued = 0; in send_pending_packet()
1000 spin_unlock_irqrestore(&hw->lock, flags); in send_pending_packet()
1010 struct ipw_hardware *hw = (struct ipw_hardware *) hw_; in ipwireless_do_tasklet() local
1013 spin_lock_irqsave(&hw->lock, flags); in ipwireless_do_tasklet()
1014 if (hw->shutting_down) { in ipwireless_do_tasklet()
1015 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_do_tasklet()
1019 if (hw->to_setup == 1) { in ipwireless_do_tasklet()
1023 hw->to_setup = 2; in ipwireless_do_tasklet()
1024 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_do_tasklet()
1026 ipw_setup_hardware(hw); in ipwireless_do_tasklet()
1027 ipw_send_setup_packet(hw); in ipwireless_do_tasklet()
1029 send_pending_packet(hw, PRIO_SETUP + 1); in ipwireless_do_tasklet()
1030 get_packets_from_hw(hw); in ipwireless_do_tasklet()
1032 int priority_limit = get_current_packet_priority(hw); in ipwireless_do_tasklet()
1035 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_do_tasklet()
1038 again = send_pending_packet(hw, priority_limit); in ipwireless_do_tasklet()
1039 again |= get_packets_from_hw(hw); in ipwireless_do_tasklet()
1047 static int is_card_present(struct ipw_hardware *hw) in is_card_present() argument
1049 if (hw->hw_version == HW_VERSION_1) in is_card_present()
1050 return inw(hw->base_port + IOIR) != 0xFFFF; in is_card_present()
1052 return readl(&hw->memory_info_regs->memreg_card_present) == in is_card_present()
1057 struct ipw_hardware *hw) in ipwireless_handle_v1_interrupt() argument
1061 irqn = inw(hw->base_port + IOIR); in ipwireless_handle_v1_interrupt()
1073 spin_lock_irqsave(&hw->lock, flags); in ipwireless_handle_v1_interrupt()
1074 hw->tx_ready = 1; in ipwireless_handle_v1_interrupt()
1075 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_handle_v1_interrupt()
1080 spin_lock_irqsave(&hw->lock, flags); in ipwireless_handle_v1_interrupt()
1081 hw->rx_ready++; in ipwireless_handle_v1_interrupt()
1082 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_handle_v1_interrupt()
1085 outw(ack, hw->base_port + IOIR); in ipwireless_handle_v1_interrupt()
1086 tasklet_schedule(&hw->tasklet); in ipwireless_handle_v1_interrupt()
1093 static void acknowledge_pcmcia_interrupt(struct ipw_hardware *hw) in acknowledge_pcmcia_interrupt() argument
1095 unsigned short csr = readw(&hw->memregs_CCR->reg_config_and_status); in acknowledge_pcmcia_interrupt()
1098 writew(csr, &hw->memregs_CCR->reg_config_and_status); in acknowledge_pcmcia_interrupt()
1102 struct ipw_hardware *hw) in ipwireless_handle_v2_v3_interrupt() argument
1112 unsigned short memtx = readw(hw->memreg_tx); in ipwireless_handle_v2_v3_interrupt()
1115 readw(&hw->memory_info_regs->memreg_rx_done); in ipwireless_handle_v2_v3_interrupt()
1123 if (hw->memreg_tx == &hw->memory_info_regs->memreg_tx_new) { in ipwireless_handle_v2_v3_interrupt()
1124 memtx = readw(&hw->memory_info_regs->memreg_tx_old); in ipwireless_handle_v2_v3_interrupt()
1128 hw->memreg_tx = in ipwireless_handle_v2_v3_interrupt()
1129 &hw->memory_info_regs->memreg_tx_old; in ipwireless_handle_v2_v3_interrupt()
1141 if (!is_card_present(hw)) { in ipwireless_handle_v2_v3_interrupt()
1142 acknowledge_pcmcia_interrupt(hw); in ipwireless_handle_v2_v3_interrupt()
1148 writew(memtx_serial, hw->memreg_tx); in ipwireless_handle_v2_v3_interrupt()
1150 if (hw->serial_number_detected) { in ipwireless_handle_v2_v3_interrupt()
1151 if (memtx_serial != hw->last_memtx_serial) { in ipwireless_handle_v2_v3_interrupt()
1152 hw->last_memtx_serial = memtx_serial; in ipwireless_handle_v2_v3_interrupt()
1153 spin_lock_irqsave(&hw->lock, flags); in ipwireless_handle_v2_v3_interrupt()
1154 hw->rx_ready++; in ipwireless_handle_v2_v3_interrupt()
1155 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_handle_v2_v3_interrupt()
1166 hw->serial_number_detected = 1; in ipwireless_handle_v2_v3_interrupt()
1170 spin_lock_irqsave(&hw->lock, flags); in ipwireless_handle_v2_v3_interrupt()
1171 hw->rx_ready++; in ipwireless_handle_v2_v3_interrupt()
1172 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_handle_v2_v3_interrupt()
1178 writew(0, &hw->memory_info_regs->memreg_rx_done); in ipwireless_handle_v2_v3_interrupt()
1179 spin_lock_irqsave(&hw->lock, flags); in ipwireless_handle_v2_v3_interrupt()
1180 hw->tx_ready = 1; in ipwireless_handle_v2_v3_interrupt()
1181 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_handle_v2_v3_interrupt()
1186 &hw->memory_info_regs->memreg_pc_interrupt_ack); in ipwireless_handle_v2_v3_interrupt()
1188 acknowledge_pcmcia_interrupt(hw); in ipwireless_handle_v2_v3_interrupt()
1191 tasklet_schedule(&hw->tasklet); in ipwireless_handle_v2_v3_interrupt()
1193 if (hw->memreg_tx == &hw->memory_info_regs->memreg_tx_new) { in ipwireless_handle_v2_v3_interrupt()
1194 if (hw->serial_number_detected) in ipwireless_handle_v2_v3_interrupt()
1200 hw->memreg_tx = in ipwireless_handle_v2_v3_interrupt()
1201 &hw->memory_info_regs->memreg_tx_old; in ipwireless_handle_v2_v3_interrupt()
1224 static void flush_packets_to_hw(struct ipw_hardware *hw) in flush_packets_to_hw() argument
1229 spin_lock_irqsave(&hw->lock, flags); in flush_packets_to_hw()
1230 priority_limit = get_current_packet_priority(hw); in flush_packets_to_hw()
1231 spin_unlock_irqrestore(&hw->lock, flags); in flush_packets_to_hw()
1233 while (send_pending_packet(hw, priority_limit)); in flush_packets_to_hw()
1236 static void send_packet(struct ipw_hardware *hw, int priority, in send_packet() argument
1241 spin_lock_irqsave(&hw->lock, flags); in send_packet()
1242 list_add_tail(&packet->queue, &hw->tx_queue[priority]); in send_packet()
1243 hw->tx_queued++; in send_packet()
1244 spin_unlock_irqrestore(&hw->lock, flags); in send_packet()
1246 flush_packets_to_hw(hw); in send_packet()
1293 int ipwireless_send_packet(struct ipw_hardware *hw, unsigned int channel_idx, in ipwireless_send_packet() argument
1309 send_packet(hw, PRIO_DATA, packet); in ipwireless_send_packet()
1313 static int set_control_line(struct ipw_hardware *hw, int prio, in set_control_line() argument
1328 send_packet(hw, prio, &packet->header); in set_control_line()
1333 static int set_DTR(struct ipw_hardware *hw, int priority, in set_DTR() argument
1337 hw->control_lines[channel_idx] |= IPW_CONTROL_LINE_DTR; in set_DTR()
1339 hw->control_lines[channel_idx] &= ~IPW_CONTROL_LINE_DTR; in set_DTR()
1341 return set_control_line(hw, priority, channel_idx, COMCTRL_DTR, state); in set_DTR()
1344 static int set_RTS(struct ipw_hardware *hw, int priority, in set_RTS() argument
1348 hw->control_lines[channel_idx] |= IPW_CONTROL_LINE_RTS; in set_RTS()
1350 hw->control_lines[channel_idx] &= ~IPW_CONTROL_LINE_RTS; in set_RTS()
1352 return set_control_line(hw, priority, channel_idx, COMCTRL_RTS, state); in set_RTS()
1355 int ipwireless_set_DTR(struct ipw_hardware *hw, unsigned int channel_idx, in ipwireless_set_DTR() argument
1358 return set_DTR(hw, PRIO_CTRL, channel_idx, state); in ipwireless_set_DTR()
1361 int ipwireless_set_RTS(struct ipw_hardware *hw, unsigned int channel_idx, in ipwireless_set_RTS() argument
1364 return set_RTS(hw, PRIO_CTRL, channel_idx, state); in ipwireless_set_RTS()
1398 static void __handle_setup_get_version_rsp(struct ipw_hardware *hw) in __handle_setup_get_version_rsp() argument
1420 send_packet(hw, PRIO_SETUP, &config_packet->header); in __handle_setup_get_version_rsp()
1430 send_packet(hw, PRIO_SETUP, &config_done_packet->header); in __handle_setup_get_version_rsp()
1443 send_packet(hw, PRIO_SETUP, &open_packet->header); in __handle_setup_get_version_rsp()
1449 ret = set_DTR(hw, PRIO_SETUP, channel_idx, in __handle_setup_get_version_rsp()
1450 (hw->control_lines[channel_idx] & in __handle_setup_get_version_rsp()
1458 ret = set_RTS(hw, PRIO_SETUP, channel_idx, in __handle_setup_get_version_rsp()
1459 (hw->control_lines [channel_idx] & in __handle_setup_get_version_rsp()
1482 send_packet(hw, PRIO_SETUP, &info_packet->header); in __handle_setup_get_version_rsp()
1485 hw->to_setup = 0; in __handle_setup_get_version_rsp()
1492 hw->to_setup = -1; in __handle_setup_get_version_rsp()
1495 static void handle_setup_get_version_rsp(struct ipw_hardware *hw, in handle_setup_get_version_rsp() argument
1498 del_timer(&hw->setup_timer); in handle_setup_get_version_rsp()
1499 hw->initializing = 0; in handle_setup_get_version_rsp()
1503 __handle_setup_get_version_rsp(hw); in handle_setup_get_version_rsp()
1510 static void ipw_send_setup_packet(struct ipw_hardware *hw) in ipw_send_setup_packet() argument
1523 send_packet(hw, PRIO_SETUP, &ver_packet->header); in ipw_send_setup_packet()
1526 static void handle_received_SETUP_packet(struct ipw_hardware *hw, in handle_received_SETUP_packet() argument
1541 if (hw->to_setup) in handle_received_SETUP_packet()
1542 handle_setup_get_version_rsp(hw, in handle_received_SETUP_packet()
1563 if (hw->to_setup) in handle_received_SETUP_packet()
1577 send_packet(hw, PRIO_SETUP, &packet->header); in handle_received_SETUP_packet()
1578 if (hw->reboot_callback) in handle_received_SETUP_packet()
1579 hw->reboot_callback(hw->reboot_callback_data); in handle_received_SETUP_packet()
1590 static void do_close_hardware(struct ipw_hardware *hw) in do_close_hardware() argument
1594 if (hw->hw_version == HW_VERSION_1) { in do_close_hardware()
1596 outw(0, hw->base_port + IOIER); in do_close_hardware()
1599 irqn = inw(hw->base_port + IOIR); in do_close_hardware()
1601 outw(IR_TXINTR, hw->base_port + IOIR); in do_close_hardware()
1603 outw(IR_RXINTR, hw->base_port + IOIR); in do_close_hardware()
1605 synchronize_irq(hw->irq); in do_close_hardware()
1612 struct ipw_hardware *hw = in ipwireless_hardware_create() local
1615 if (!hw) in ipwireless_hardware_create()
1618 hw->irq = -1; in ipwireless_hardware_create()
1619 hw->initializing = 1; in ipwireless_hardware_create()
1620 hw->tx_ready = 1; in ipwireless_hardware_create()
1621 hw->rx_bytes_queued = 0; in ipwireless_hardware_create()
1622 hw->rx_pool_size = 0; in ipwireless_hardware_create()
1623 hw->last_memtx_serial = (unsigned short) 0xffff; in ipwireless_hardware_create()
1625 INIT_LIST_HEAD(&hw->tx_queue[i]); in ipwireless_hardware_create()
1627 INIT_LIST_HEAD(&hw->rx_queue); in ipwireless_hardware_create()
1628 INIT_LIST_HEAD(&hw->rx_pool); in ipwireless_hardware_create()
1629 spin_lock_init(&hw->lock); in ipwireless_hardware_create()
1630 tasklet_init(&hw->tasklet, ipwireless_do_tasklet, (unsigned long) hw); in ipwireless_hardware_create()
1631 INIT_WORK(&hw->work_rx, ipw_receive_data_work); in ipwireless_hardware_create()
1632 setup_timer(&hw->setup_timer, ipwireless_setup_timer, in ipwireless_hardware_create()
1633 (unsigned long) hw); in ipwireless_hardware_create()
1635 return hw; in ipwireless_hardware_create()
1638 void ipwireless_init_hardware_v1(struct ipw_hardware *hw, in ipwireless_init_hardware_v1() argument
1646 if (hw->removed) { in ipwireless_init_hardware_v1()
1647 hw->removed = 0; in ipwireless_init_hardware_v1()
1648 enable_irq(hw->irq); in ipwireless_init_hardware_v1()
1650 hw->base_port = base_port; in ipwireless_init_hardware_v1()
1651 hw->hw_version = (is_v2_card ? HW_VERSION_2 : HW_VERSION_1); in ipwireless_init_hardware_v1()
1652 hw->ll_mtu = (hw->hw_version == HW_VERSION_1 ? LL_MTU_V1 : LL_MTU_V2); in ipwireless_init_hardware_v1()
1653 hw->memregs_CCR = (struct MEMCCR __iomem *) in ipwireless_init_hardware_v1()
1655 hw->memory_info_regs = (struct MEMINFREG __iomem *) common_memory; in ipwireless_init_hardware_v1()
1656 hw->memreg_tx = &hw->memory_info_regs->memreg_tx_new; in ipwireless_init_hardware_v1()
1657 hw->reboot_callback = reboot_callback; in ipwireless_init_hardware_v1()
1658 hw->reboot_callback_data = reboot_callback_data; in ipwireless_init_hardware_v1()
1661 void ipwireless_init_hardware_v2_v3(struct ipw_hardware *hw) in ipwireless_init_hardware_v2_v3() argument
1663 hw->initializing = 1; in ipwireless_init_hardware_v2_v3()
1664 hw->init_loops = 0; in ipwireless_init_hardware_v2_v3()
1667 ipwireless_setup_timer((unsigned long) hw); in ipwireless_init_hardware_v2_v3()
1672 struct ipw_hardware *hw = (struct ipw_hardware *) data; in ipwireless_setup_timer() local
1674 hw->init_loops++; in ipwireless_setup_timer()
1676 if (hw->init_loops == TL_SETUP_MAX_VERSION_QRY && in ipwireless_setup_timer()
1677 hw->hw_version == HW_VERSION_2 && in ipwireless_setup_timer()
1678 hw->memreg_tx == &hw->memory_info_regs->memreg_tx_new) { in ipwireless_setup_timer()
1682 hw->memreg_tx = &hw->memory_info_regs->memreg_tx_old; in ipwireless_setup_timer()
1683 hw->init_loops = 0; in ipwireless_setup_timer()
1686 if (hw->init_loops == TL_SETUP_MAX_VERSION_QRY) { in ipwireless_setup_timer()
1689 hw->initializing = 0; in ipwireless_setup_timer()
1692 if (is_card_present(hw)) { in ipwireless_setup_timer()
1695 spin_lock_irqsave(&hw->lock, flags); in ipwireless_setup_timer()
1696 hw->to_setup = 1; in ipwireless_setup_timer()
1697 hw->tx_ready = 1; in ipwireless_setup_timer()
1698 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_setup_timer()
1699 tasklet_schedule(&hw->tasklet); in ipwireless_setup_timer()
1702 mod_timer(&hw->setup_timer, in ipwireless_setup_timer()
1712 void ipwireless_stop_interrupts(struct ipw_hardware *hw) in ipwireless_stop_interrupts() argument
1714 if (!hw->shutting_down) { in ipwireless_stop_interrupts()
1716 hw->shutting_down = 1; in ipwireless_stop_interrupts()
1717 del_timer(&hw->setup_timer); in ipwireless_stop_interrupts()
1720 do_close_hardware(hw); in ipwireless_stop_interrupts()
1724 void ipwireless_hardware_free(struct ipw_hardware *hw) in ipwireless_hardware_free() argument
1730 ipwireless_stop_interrupts(hw); in ipwireless_hardware_free()
1732 flush_work(&hw->work_rx); in ipwireless_hardware_free()
1735 kfree(hw->packet_assembler[i]); in ipwireless_hardware_free()
1738 list_for_each_entry_safe(tp, tq, &hw->tx_queue[i], queue) { in ipwireless_hardware_free()
1743 list_for_each_entry_safe(rp, rq, &hw->rx_queue, queue) { in ipwireless_hardware_free()
1748 list_for_each_entry_safe(rp, rq, &hw->rx_pool, queue) { in ipwireless_hardware_free()
1752 kfree(hw); in ipwireless_hardware_free()
1759 void ipwireless_associate_network(struct ipw_hardware *hw, in ipwireless_associate_network() argument
1762 hw->network = network; in ipwireless_associate_network()