Lines Matching full:hw

31 static void ipw_send_setup_packet(struct ipw_hardware *hw);
37 static void handle_received_CTRL_packet(struct ipw_hardware *hw,
239 /* Flag if hw is ready to send next packet */
404 static void do_send_fragment(struct ipw_hardware *hw, unsigned char *data, in do_send_fragment() argument
411 BUG_ON(length > hw->ll_mtu); in do_send_fragment()
416 spin_lock_irqsave(&hw->lock, flags); in do_send_fragment()
418 hw->tx_ready = 0; in do_send_fragment()
421 if (hw->hw_version == HW_VERSION_1) { in do_send_fragment()
422 outw((unsigned short) length, hw->base_port + IODWR); in do_send_fragment()
431 outw(raw_data, hw->base_port + IODWR); in do_send_fragment()
434 outw(DCR_TXDONE, hw->base_port + IODCR); in do_send_fragment()
435 } else if (hw->hw_version == HW_VERSION_2) { in do_send_fragment()
436 outw((unsigned short) length, hw->base_port); in do_send_fragment()
445 outw(raw_data, hw->base_port); in do_send_fragment()
448 outw((unsigned short) 0xDEAD, hw->base_port); in do_send_fragment()
451 writew(MEMRX_RX, &hw->memory_info_regs->memreg_rx); in do_send_fragment()
454 spin_unlock_irqrestore(&hw->lock, flags); in do_send_fragment()
459 static void do_send_packet(struct ipw_hardware *hw, struct ipw_tx_packet *packet) in do_send_packet() argument
470 fragment_data_len = hw->ll_mtu - header_size; in do_send_packet()
476 * to le just before it goes to hw in do_send_packet()
499 do_send_fragment(hw, pkt.rawpkt, header_size + fragment_data_len); in do_send_packet()
509 spin_lock_irqsave(&hw->lock, flags); in do_send_packet()
510 list_add(&packet->queue, &hw->tx_queue[0]); in do_send_packet()
511 hw->tx_queued++; in do_send_packet()
512 spin_unlock_irqrestore(&hw->lock, flags); in do_send_packet()
521 static void ipw_setup_hardware(struct ipw_hardware *hw) in ipw_setup_hardware() argument
525 spin_lock_irqsave(&hw->lock, flags); in ipw_setup_hardware()
526 if (hw->hw_version == HW_VERSION_1) { in ipw_setup_hardware()
528 outw(DCR_RXRESET, hw->base_port + IODCR); in ipw_setup_hardware()
530 outw(DCR_TXRESET, hw->base_port + IODCR); in ipw_setup_hardware()
533 outw(IER_TXENABLED | IER_RXENABLED, hw->base_port + IOIER); in ipw_setup_hardware()
539 unsigned short csr = readw(&hw->memregs_CCR->reg_config_and_status); in ipw_setup_hardware()
542 writew(csr, &hw->memregs_CCR->reg_config_and_status); in ipw_setup_hardware()
544 spin_unlock_irqrestore(&hw->lock, flags); in ipw_setup_hardware()
555 static struct ipw_rx_packet *pool_allocate(struct ipw_hardware *hw, in pool_allocate() argument
563 spin_lock_irqsave(&hw->lock, flags); in pool_allocate()
564 if (!list_empty(&hw->rx_pool)) { in pool_allocate()
565 packet = list_first_entry(&hw->rx_pool, in pool_allocate()
567 hw->rx_pool_size--; in pool_allocate()
568 spin_unlock_irqrestore(&hw->lock, flags); in pool_allocate()
572 ipwireless_ppp_mru(hw->network) + 2; in pool_allocate()
575 spin_unlock_irqrestore(&hw->lock, flags); in pool_allocate()
609 static void pool_free(struct ipw_hardware *hw, struct ipw_rx_packet *packet) in pool_free() argument
611 if (hw->rx_pool_size > 6) in pool_free()
614 hw->rx_pool_size++; in pool_free()
615 list_add(&packet->queue, &hw->rx_pool); in pool_free()
619 static void queue_received_packet(struct ipw_hardware *hw, in queue_received_packet() argument
641 &hw->packet_assembler[channel_idx]; in queue_received_packet()
647 (*assem) = pool_allocate(hw, *assem, length); in queue_received_packet()
665 spin_lock_irqsave(&hw->lock, flags); in queue_received_packet()
666 hw->rx_bytes_queued += packet->length; in queue_received_packet()
667 spin_unlock_irqrestore(&hw->lock, flags); in queue_received_packet()
671 packet = pool_allocate(hw, NULL, length); in queue_received_packet()
689 spin_lock_irqsave(&hw->lock, flags); in queue_received_packet()
690 list_add_tail(&packet->queue, &hw->rx_queue); in queue_received_packet()
692 hw->blocking_rx = in queue_received_packet()
693 (hw->rx_bytes_queued >= IPWIRELESS_RX_QUEUE_SIZE); in queue_received_packet()
695 spin_unlock_irqrestore(&hw->lock, flags); in queue_received_packet()
696 schedule_work(&hw->work_rx); in queue_received_packet()
705 struct ipw_hardware *hw = in ipw_receive_data_work() local
709 spin_lock_irqsave(&hw->lock, flags); in ipw_receive_data_work()
710 while (!list_empty(&hw->rx_queue)) { in ipw_receive_data_work()
712 list_first_entry(&hw->rx_queue, in ipw_receive_data_work()
715 if (hw->shutting_down) in ipw_receive_data_work()
725 if (hw->network != NULL) { in ipw_receive_data_work()
727 spin_unlock_irqrestore(&hw->lock, flags); in ipw_receive_data_work()
733 hw->network, in ipw_receive_data_work()
738 spin_lock_irqsave(&hw->lock, flags); in ipw_receive_data_work()
741 hw->rx_bytes_queued -= packet->length; in ipw_receive_data_work()
747 handle_received_CTRL_packet(hw, packet->channel_idx, in ipw_receive_data_work()
752 pool_free(hw, packet); in ipw_receive_data_work()
757 hw->blocking_rx = in ipw_receive_data_work()
758 hw->rx_bytes_queued >= IPWIRELESS_RX_QUEUE_SIZE; in ipw_receive_data_work()
759 if (hw->shutting_down) in ipw_receive_data_work()
762 spin_unlock_irqrestore(&hw->lock, flags); in ipw_receive_data_work()
765 static void handle_received_CTRL_packet(struct ipw_hardware *hw, in handle_received_CTRL_packet() argument
799 hw->control_lines[channel_idx] |= changed_mask; in handle_received_CTRL_packet()
801 hw->control_lines[channel_idx] &= ~changed_mask; in handle_received_CTRL_packet()
802 if (hw->network) in handle_received_CTRL_packet()
804 hw->network, in handle_received_CTRL_packet()
806 hw->control_lines[channel_idx], in handle_received_CTRL_packet()
811 static void handle_received_packet(struct ipw_hardware *hw, in handle_received_packet() argument
832 queue_received_packet(hw, protocol, address, data, data_len, in handle_received_packet()
836 handle_received_SETUP_packet(hw, address, data, data_len, in handle_received_packet()
842 static void acknowledge_data_read(struct ipw_hardware *hw) in acknowledge_data_read() argument
844 if (hw->hw_version == HW_VERSION_1) in acknowledge_data_read()
845 outw(DCR_RXDONE, hw->base_port + IODCR); in acknowledge_data_read()
848 &hw->memory_info_regs->memreg_pc_interrupt_ack); in acknowledge_data_read()
854 static void do_receive_packet(struct ipw_hardware *hw) in do_receive_packet() argument
862 if (hw->hw_version == HW_VERSION_1) { in do_receive_packet()
863 len = inw(hw->base_port + IODRR); in do_receive_packet()
864 if (len > hw->ll_mtu) { in do_receive_packet()
867 outw(DCR_RXDONE | DCR_RXRESET, hw->base_port + IODCR); in do_receive_packet()
872 __le16 raw_data = inw(hw->base_port + IODRR); in do_receive_packet()
879 len = inw(hw->base_port); in do_receive_packet()
880 if (len > hw->ll_mtu) { in do_receive_packet()
884 &hw->memory_info_regs->memreg_pc_interrupt_ack); in do_receive_packet()
889 __le16 raw_data = inw(hw->base_port); in do_receive_packet()
897 inw(hw->base_port); in do_receive_packet()
902 acknowledge_data_read(hw); in do_receive_packet()
909 handle_received_packet(hw, (union nl_packet *) pkt, len); in do_receive_packet()
914 static int get_current_packet_priority(struct ipw_hardware *hw) in get_current_packet_priority() argument
922 return (hw->to_setup || hw->initializing in get_current_packet_priority()
927 * return 1 if something has been received from hw
929 static int get_packets_from_hw(struct ipw_hardware *hw) in get_packets_from_hw() argument
934 spin_lock_irqsave(&hw->lock, flags); in get_packets_from_hw()
935 while (hw->rx_ready && !hw->blocking_rx) { in get_packets_from_hw()
937 hw->rx_ready--; in get_packets_from_hw()
938 spin_unlock_irqrestore(&hw->lock, flags); in get_packets_from_hw()
940 do_receive_packet(hw); in get_packets_from_hw()
942 spin_lock_irqsave(&hw->lock, flags); in get_packets_from_hw()
944 spin_unlock_irqrestore(&hw->lock, flags); in get_packets_from_hw()
955 static int send_pending_packet(struct ipw_hardware *hw, int priority_limit) in send_pending_packet() argument
960 spin_lock_irqsave(&hw->lock, flags); in send_pending_packet()
961 if (hw->tx_queued && hw->tx_ready) { in send_pending_packet()
967 if (!list_empty(&hw->tx_queue[priority])) { in send_pending_packet()
969 &hw->tx_queue[priority], in send_pending_packet()
973 hw->tx_queued--; in send_pending_packet()
980 hw->tx_queued = 0; in send_pending_packet()
981 spin_unlock_irqrestore(&hw->lock, flags); in send_pending_packet()
985 spin_unlock_irqrestore(&hw->lock, flags); in send_pending_packet()
988 do_send_packet(hw, packet); in send_pending_packet()
991 spin_lock_irqsave(&hw->lock, flags); in send_pending_packet()
993 if (!list_empty(&hw->tx_queue[priority])) { in send_pending_packet()
999 hw->tx_queued = 0; in send_pending_packet()
1001 spin_unlock_irqrestore(&hw->lock, flags); in send_pending_packet()
1011 struct ipw_hardware *hw = from_tasklet(hw, t, tasklet); in ipwireless_do_tasklet() local
1014 spin_lock_irqsave(&hw->lock, flags); in ipwireless_do_tasklet()
1015 if (hw->shutting_down) { in ipwireless_do_tasklet()
1016 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_do_tasklet()
1020 if (hw->to_setup == 1) { in ipwireless_do_tasklet()
1024 hw->to_setup = 2; in ipwireless_do_tasklet()
1025 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_do_tasklet()
1027 ipw_setup_hardware(hw); in ipwireless_do_tasklet()
1028 ipw_send_setup_packet(hw); in ipwireless_do_tasklet()
1030 send_pending_packet(hw, PRIO_SETUP + 1); in ipwireless_do_tasklet()
1031 get_packets_from_hw(hw); in ipwireless_do_tasklet()
1033 int priority_limit = get_current_packet_priority(hw); in ipwireless_do_tasklet()
1036 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_do_tasklet()
1039 again = send_pending_packet(hw, priority_limit); in ipwireless_do_tasklet()
1040 again |= get_packets_from_hw(hw); in ipwireless_do_tasklet()
1048 static int is_card_present(struct ipw_hardware *hw) in is_card_present() argument
1050 if (hw->hw_version == HW_VERSION_1) in is_card_present()
1051 return inw(hw->base_port + IOIR) != 0xFFFF; in is_card_present()
1053 return readl(&hw->memory_info_regs->memreg_card_present) == in is_card_present()
1058 struct ipw_hardware *hw) in ipwireless_handle_v1_interrupt() argument
1062 irqn = inw(hw->base_port + IOIR); in ipwireless_handle_v1_interrupt()
1074 spin_lock_irqsave(&hw->lock, flags); in ipwireless_handle_v1_interrupt()
1075 hw->tx_ready = 1; in ipwireless_handle_v1_interrupt()
1076 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_handle_v1_interrupt()
1081 spin_lock_irqsave(&hw->lock, flags); in ipwireless_handle_v1_interrupt()
1082 hw->rx_ready++; in ipwireless_handle_v1_interrupt()
1083 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_handle_v1_interrupt()
1086 outw(ack, hw->base_port + IOIR); in ipwireless_handle_v1_interrupt()
1087 tasklet_schedule(&hw->tasklet); in ipwireless_handle_v1_interrupt()
1094 static void acknowledge_pcmcia_interrupt(struct ipw_hardware *hw) in acknowledge_pcmcia_interrupt() argument
1096 unsigned short csr = readw(&hw->memregs_CCR->reg_config_and_status); in acknowledge_pcmcia_interrupt()
1099 writew(csr, &hw->memregs_CCR->reg_config_and_status); in acknowledge_pcmcia_interrupt()
1103 struct ipw_hardware *hw) in ipwireless_handle_v2_v3_interrupt() argument
1113 unsigned short memtx = readw(hw->memreg_tx); in ipwireless_handle_v2_v3_interrupt()
1116 readw(&hw->memory_info_regs->memreg_rx_done); in ipwireless_handle_v2_v3_interrupt()
1124 if (hw->memreg_tx == &hw->memory_info_regs->memreg_tx_new) { in ipwireless_handle_v2_v3_interrupt()
1125 memtx = readw(&hw->memory_info_regs->memreg_tx_old); in ipwireless_handle_v2_v3_interrupt()
1129 hw->memreg_tx = in ipwireless_handle_v2_v3_interrupt()
1130 &hw->memory_info_regs->memreg_tx_old; in ipwireless_handle_v2_v3_interrupt()
1142 if (!is_card_present(hw)) { in ipwireless_handle_v2_v3_interrupt()
1143 acknowledge_pcmcia_interrupt(hw); in ipwireless_handle_v2_v3_interrupt()
1149 writew(memtx_serial, hw->memreg_tx); in ipwireless_handle_v2_v3_interrupt()
1151 if (hw->serial_number_detected) { in ipwireless_handle_v2_v3_interrupt()
1152 if (memtx_serial != hw->last_memtx_serial) { in ipwireless_handle_v2_v3_interrupt()
1153 hw->last_memtx_serial = memtx_serial; in ipwireless_handle_v2_v3_interrupt()
1154 spin_lock_irqsave(&hw->lock, flags); in ipwireless_handle_v2_v3_interrupt()
1155 hw->rx_ready++; in ipwireless_handle_v2_v3_interrupt()
1156 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_handle_v2_v3_interrupt()
1167 hw->serial_number_detected = 1; in ipwireless_handle_v2_v3_interrupt()
1171 spin_lock_irqsave(&hw->lock, flags); in ipwireless_handle_v2_v3_interrupt()
1172 hw->rx_ready++; in ipwireless_handle_v2_v3_interrupt()
1173 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_handle_v2_v3_interrupt()
1179 writew(0, &hw->memory_info_regs->memreg_rx_done); in ipwireless_handle_v2_v3_interrupt()
1180 spin_lock_irqsave(&hw->lock, flags); in ipwireless_handle_v2_v3_interrupt()
1181 hw->tx_ready = 1; in ipwireless_handle_v2_v3_interrupt()
1182 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_handle_v2_v3_interrupt()
1187 &hw->memory_info_regs->memreg_pc_interrupt_ack); in ipwireless_handle_v2_v3_interrupt()
1189 acknowledge_pcmcia_interrupt(hw); in ipwireless_handle_v2_v3_interrupt()
1192 tasklet_schedule(&hw->tasklet); in ipwireless_handle_v2_v3_interrupt()
1194 if (hw->memreg_tx == &hw->memory_info_regs->memreg_tx_new) { in ipwireless_handle_v2_v3_interrupt()
1195 if (hw->serial_number_detected) in ipwireless_handle_v2_v3_interrupt()
1201 hw->memreg_tx = in ipwireless_handle_v2_v3_interrupt()
1202 &hw->memory_info_regs->memreg_tx_old; in ipwireless_handle_v2_v3_interrupt()
1225 static void flush_packets_to_hw(struct ipw_hardware *hw) in flush_packets_to_hw() argument
1230 spin_lock_irqsave(&hw->lock, flags); in flush_packets_to_hw()
1231 priority_limit = get_current_packet_priority(hw); in flush_packets_to_hw()
1232 spin_unlock_irqrestore(&hw->lock, flags); in flush_packets_to_hw()
1234 while (send_pending_packet(hw, priority_limit)); in flush_packets_to_hw()
1237 static void send_packet(struct ipw_hardware *hw, int priority, in send_packet() argument
1242 spin_lock_irqsave(&hw->lock, flags); in send_packet()
1243 list_add_tail(&packet->queue, &hw->tx_queue[priority]); in send_packet()
1244 hw->tx_queued++; in send_packet()
1245 spin_unlock_irqrestore(&hw->lock, flags); in send_packet()
1247 flush_packets_to_hw(hw); in send_packet()
1294 int ipwireless_send_packet(struct ipw_hardware *hw, unsigned int channel_idx, in ipwireless_send_packet() argument
1310 send_packet(hw, PRIO_DATA, packet); in ipwireless_send_packet()
1314 static int set_control_line(struct ipw_hardware *hw, int prio, in set_control_line() argument
1329 send_packet(hw, prio, &packet->header); in set_control_line()
1334 static int set_DTR(struct ipw_hardware *hw, int priority, in set_DTR() argument
1338 hw->control_lines[channel_idx] |= IPW_CONTROL_LINE_DTR; in set_DTR()
1340 hw->control_lines[channel_idx] &= ~IPW_CONTROL_LINE_DTR; in set_DTR()
1342 return set_control_line(hw, priority, channel_idx, COMCTRL_DTR, state); in set_DTR()
1345 static int set_RTS(struct ipw_hardware *hw, int priority, in set_RTS() argument
1349 hw->control_lines[channel_idx] |= IPW_CONTROL_LINE_RTS; in set_RTS()
1351 hw->control_lines[channel_idx] &= ~IPW_CONTROL_LINE_RTS; in set_RTS()
1353 return set_control_line(hw, priority, channel_idx, COMCTRL_RTS, state); in set_RTS()
1356 int ipwireless_set_DTR(struct ipw_hardware *hw, unsigned int channel_idx, in ipwireless_set_DTR() argument
1359 return set_DTR(hw, PRIO_CTRL, channel_idx, state); in ipwireless_set_DTR()
1362 int ipwireless_set_RTS(struct ipw_hardware *hw, unsigned int channel_idx, in ipwireless_set_RTS() argument
1365 return set_RTS(hw, PRIO_CTRL, channel_idx, state); in ipwireless_set_RTS()
1399 static void __handle_setup_get_version_rsp(struct ipw_hardware *hw) in __handle_setup_get_version_rsp() argument
1421 send_packet(hw, PRIO_SETUP, &config_packet->header); in __handle_setup_get_version_rsp()
1431 send_packet(hw, PRIO_SETUP, &config_done_packet->header); in __handle_setup_get_version_rsp()
1444 send_packet(hw, PRIO_SETUP, &open_packet->header); in __handle_setup_get_version_rsp()
1450 ret = set_DTR(hw, PRIO_SETUP, channel_idx, in __handle_setup_get_version_rsp()
1451 (hw->control_lines[channel_idx] & in __handle_setup_get_version_rsp()
1459 ret = set_RTS(hw, PRIO_SETUP, channel_idx, in __handle_setup_get_version_rsp()
1460 (hw->control_lines [channel_idx] & in __handle_setup_get_version_rsp()
1483 send_packet(hw, PRIO_SETUP, &info_packet->header); in __handle_setup_get_version_rsp()
1486 hw->to_setup = 0; in __handle_setup_get_version_rsp()
1493 hw->to_setup = -1; in __handle_setup_get_version_rsp()
1496 static void handle_setup_get_version_rsp(struct ipw_hardware *hw, in handle_setup_get_version_rsp() argument
1499 timer_delete(&hw->setup_timer); in handle_setup_get_version_rsp()
1500 hw->initializing = 0; in handle_setup_get_version_rsp()
1504 __handle_setup_get_version_rsp(hw); in handle_setup_get_version_rsp()
1511 static void ipw_send_setup_packet(struct ipw_hardware *hw) in ipw_send_setup_packet() argument
1526 send_packet(hw, PRIO_SETUP, &ver_packet->header); in ipw_send_setup_packet()
1529 static void handle_received_SETUP_packet(struct ipw_hardware *hw, in handle_received_SETUP_packet() argument
1544 if (hw->to_setup) in handle_received_SETUP_packet()
1545 handle_setup_get_version_rsp(hw, in handle_received_SETUP_packet()
1566 if (hw->to_setup) in handle_received_SETUP_packet()
1585 send_packet(hw, PRIO_SETUP, &packet->header); in handle_received_SETUP_packet()
1586 if (hw->reboot_callback) in handle_received_SETUP_packet()
1587 hw->reboot_callback(hw->reboot_callback_data); in handle_received_SETUP_packet()
1598 static void do_close_hardware(struct ipw_hardware *hw) in do_close_hardware() argument
1602 if (hw->hw_version == HW_VERSION_1) { in do_close_hardware()
1604 outw(0, hw->base_port + IOIER); in do_close_hardware()
1607 irqn = inw(hw->base_port + IOIR); in do_close_hardware()
1609 outw(IR_TXINTR, hw->base_port + IOIR); in do_close_hardware()
1611 outw(IR_RXINTR, hw->base_port + IOIR); in do_close_hardware()
1613 synchronize_irq(hw->irq); in do_close_hardware()
1620 struct ipw_hardware *hw = in ipwireless_hardware_create() local
1623 if (!hw) in ipwireless_hardware_create()
1626 hw->irq = -1; in ipwireless_hardware_create()
1627 hw->initializing = 1; in ipwireless_hardware_create()
1628 hw->tx_ready = 1; in ipwireless_hardware_create()
1629 hw->rx_bytes_queued = 0; in ipwireless_hardware_create()
1630 hw->rx_pool_size = 0; in ipwireless_hardware_create()
1631 hw->last_memtx_serial = (unsigned short) 0xffff; in ipwireless_hardware_create()
1633 INIT_LIST_HEAD(&hw->tx_queue[i]); in ipwireless_hardware_create()
1635 INIT_LIST_HEAD(&hw->rx_queue); in ipwireless_hardware_create()
1636 INIT_LIST_HEAD(&hw->rx_pool); in ipwireless_hardware_create()
1637 spin_lock_init(&hw->lock); in ipwireless_hardware_create()
1638 tasklet_setup(&hw->tasklet, ipwireless_do_tasklet); in ipwireless_hardware_create()
1639 INIT_WORK(&hw->work_rx, ipw_receive_data_work); in ipwireless_hardware_create()
1640 timer_setup(&hw->setup_timer, ipwireless_setup_timer, 0); in ipwireless_hardware_create()
1642 return hw; in ipwireless_hardware_create()
1645 void ipwireless_init_hardware_v1(struct ipw_hardware *hw, in ipwireless_init_hardware_v1() argument
1653 if (hw->removed) { in ipwireless_init_hardware_v1()
1654 hw->removed = 0; in ipwireless_init_hardware_v1()
1655 enable_irq(hw->irq); in ipwireless_init_hardware_v1()
1657 hw->base_port = base_port; in ipwireless_init_hardware_v1()
1658 hw->hw_version = (is_v2_card ? HW_VERSION_2 : HW_VERSION_1); in ipwireless_init_hardware_v1()
1659 hw->ll_mtu = (hw->hw_version == HW_VERSION_1 ? LL_MTU_V1 : LL_MTU_V2); in ipwireless_init_hardware_v1()
1660 hw->memregs_CCR = (struct MEMCCR __iomem *) in ipwireless_init_hardware_v1()
1662 hw->memory_info_regs = (struct MEMINFREG __iomem *) common_memory; in ipwireless_init_hardware_v1()
1663 hw->memreg_tx = &hw->memory_info_regs->memreg_tx_new; in ipwireless_init_hardware_v1()
1664 hw->reboot_callback = reboot_callback; in ipwireless_init_hardware_v1()
1665 hw->reboot_callback_data = reboot_callback_data; in ipwireless_init_hardware_v1()
1668 void ipwireless_init_hardware_v2_v3(struct ipw_hardware *hw) in ipwireless_init_hardware_v2_v3() argument
1670 hw->initializing = 1; in ipwireless_init_hardware_v2_v3()
1671 hw->init_loops = 0; in ipwireless_init_hardware_v2_v3()
1674 ipwireless_setup_timer(&hw->setup_timer); in ipwireless_init_hardware_v2_v3()
1679 struct ipw_hardware *hw = timer_container_of(hw, t, setup_timer); in ipwireless_setup_timer() local
1681 hw->init_loops++; in ipwireless_setup_timer()
1683 if (hw->init_loops == TL_SETUP_MAX_VERSION_QRY && in ipwireless_setup_timer()
1684 hw->hw_version == HW_VERSION_2 && in ipwireless_setup_timer()
1685 hw->memreg_tx == &hw->memory_info_regs->memreg_tx_new) { in ipwireless_setup_timer()
1689 hw->memreg_tx = &hw->memory_info_regs->memreg_tx_old; in ipwireless_setup_timer()
1690 hw->init_loops = 0; in ipwireless_setup_timer()
1693 if (hw->init_loops == TL_SETUP_MAX_VERSION_QRY) { in ipwireless_setup_timer()
1696 hw->initializing = 0; in ipwireless_setup_timer()
1699 if (is_card_present(hw)) { in ipwireless_setup_timer()
1702 spin_lock_irqsave(&hw->lock, flags); in ipwireless_setup_timer()
1703 hw->to_setup = 1; in ipwireless_setup_timer()
1704 hw->tx_ready = 1; in ipwireless_setup_timer()
1705 spin_unlock_irqrestore(&hw->lock, flags); in ipwireless_setup_timer()
1706 tasklet_schedule(&hw->tasklet); in ipwireless_setup_timer()
1709 mod_timer(&hw->setup_timer, in ipwireless_setup_timer()
1719 void ipwireless_stop_interrupts(struct ipw_hardware *hw) in ipwireless_stop_interrupts() argument
1721 if (!hw->shutting_down) { in ipwireless_stop_interrupts()
1723 hw->shutting_down = 1; in ipwireless_stop_interrupts()
1724 timer_delete(&hw->setup_timer); in ipwireless_stop_interrupts()
1727 do_close_hardware(hw); in ipwireless_stop_interrupts()
1731 void ipwireless_hardware_free(struct ipw_hardware *hw) in ipwireless_hardware_free() argument
1737 ipwireless_stop_interrupts(hw); in ipwireless_hardware_free()
1739 flush_work(&hw->work_rx); in ipwireless_hardware_free()
1742 kfree(hw->packet_assembler[i]); in ipwireless_hardware_free()
1745 list_for_each_entry_safe(tp, tq, &hw->tx_queue[i], queue) { in ipwireless_hardware_free()
1750 list_for_each_entry_safe(rp, rq, &hw->rx_queue, queue) { in ipwireless_hardware_free()
1755 list_for_each_entry_safe(rp, rq, &hw->rx_pool, queue) { in ipwireless_hardware_free()
1759 kfree(hw); in ipwireless_hardware_free()
1766 void ipwireless_associate_network(struct ipw_hardware *hw, in ipwireless_associate_network() argument
1769 hw->network = network; in ipwireless_associate_network()