⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wavelan.c

📁 优龙2410linux2.6.8内核源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	       p->psa_feature_select);	printk("psa_subband/decay_update_prm: %d\n", p->psa_subband);	printk(KERN_DEBUG "psa_quality_thr: 0x%02x, ", p->psa_quality_thr);	printk("psa_mod_delay: 0x%02x\n", p->psa_mod_delay);	printk(KERN_DEBUG "psa_nwid: 0x%02x%02x, ", p->psa_nwid[0],	       p->psa_nwid[1]);	printk("psa_nwid_select: %d\n", p->psa_nwid_select);	printk(KERN_DEBUG "psa_encryption_select: %d, ",	       p->psa_encryption_select);	printk	    ("psa_encryption_key[]: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",	     p->psa_encryption_key[0], p->psa_encryption_key[1],	     p->psa_encryption_key[2], p->psa_encryption_key[3],	     p->psa_encryption_key[4], p->psa_encryption_key[5],	     p->psa_encryption_key[6], p->psa_encryption_key[7]);	printk(KERN_DEBUG "psa_databus_width: %d\n", p->psa_databus_width);	printk(KERN_DEBUG "psa_call_code/auto_squelch: 0x%02x, ",	       p->psa_call_code[0]);	printk	    ("psa_call_code[]: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",	     p->psa_call_code[0], p->psa_call_code[1], p->psa_call_code[2],	     p->psa_call_code[3], p->psa_call_code[4], p->psa_call_code[5],	     p->psa_call_code[6], p->psa_call_code[7]);#ifdef DEBUG_SHOW_UNUSED	printk(KERN_DEBUG "psa_reserved[]: %02X:%02X:%02X:%02X\n",	       p->psa_reserved[0],	       p->psa_reserved[1], p->psa_reserved[2], p->psa_reserved[3]);#endif				/* DEBUG_SHOW_UNUSED */	printk(KERN_DEBUG "psa_conf_status: %d, ", p->psa_conf_status);	printk("psa_crc: 0x%02x%02x, ", p->psa_crc[0], p->psa_crc[1]);	printk("psa_crc_status: 0x%02x\n", p->psa_crc_status);}				/* wv_psa_show */#endif				/* DEBUG_PSA_SHOW */#ifdef DEBUG_MMC_SHOW/*------------------------------------------------------------------*//* * Print the formatted status of the Modem Management Controller. * This function needs to be completed. */static void wv_mmc_show(struct net_device * dev){	unsigned long ioaddr = dev->base_addr;	net_local *lp = (net_local *) dev->priv;	mmr_t m;	/* Basic check */	if (hasr_read(ioaddr) & HASR_NO_CLK) {		printk(KERN_WARNING		       "%s: wv_mmc_show: modem not connected\n",		       dev->name);		return;	}	/* Read the mmc */	mmc_out(ioaddr, mmwoff(0, mmw_freeze), 1);	mmc_read(ioaddr, 0, (u8 *) & m, sizeof(m));	mmc_out(ioaddr, mmwoff(0, mmw_freeze), 0);#ifdef WIRELESS_EXT		/* if wireless extension exists in the kernel */	/* Don't forget to update statistics */	lp->wstats.discard.nwid +=	    (m.mmr_wrong_nwid_h << 8) | m.mmr_wrong_nwid_l;#endif				/* WIRELESS_EXT */	printk(KERN_DEBUG "##### WaveLAN modem status registers: #####\n");#ifdef DEBUG_SHOW_UNUSED	printk(KERN_DEBUG	       "mmc_unused0[]: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",	       m.mmr_unused0[0], m.mmr_unused0[1], m.mmr_unused0[2],	       m.mmr_unused0[3], m.mmr_unused0[4], m.mmr_unused0[5],	       m.mmr_unused0[6], m.mmr_unused0[7]);#endif				/* DEBUG_SHOW_UNUSED */	printk(KERN_DEBUG "Encryption algorithm: %02X - Status: %02X\n",	       m.mmr_des_avail, m.mmr_des_status);#ifdef DEBUG_SHOW_UNUSED	printk(KERN_DEBUG "mmc_unused1[]: %02X:%02X:%02X:%02X:%02X\n",	       m.mmr_unused1[0],	       m.mmr_unused1[1],	       m.mmr_unused1[2], m.mmr_unused1[3], m.mmr_unused1[4]);#endif				/* DEBUG_SHOW_UNUSED */	printk(KERN_DEBUG "dce_status: 0x%x [%s%s%s%s]\n",	       m.mmr_dce_status,	       (m.		mmr_dce_status & MMR_DCE_STATUS_RX_BUSY) ?	       "energy detected," : "",	       (m.		mmr_dce_status & MMR_DCE_STATUS_LOOPT_IND) ?	       "loop test indicated," : "",	       (m.		mmr_dce_status & MMR_DCE_STATUS_TX_BUSY) ?	       "transmitter on," : "",	       (m.		mmr_dce_status & MMR_DCE_STATUS_JBR_EXPIRED) ?	       "jabber timer expired," : "");	printk(KERN_DEBUG "Dsp ID: %02X\n", m.mmr_dsp_id);#ifdef DEBUG_SHOW_UNUSED	printk(KERN_DEBUG "mmc_unused2[]: %02X:%02X\n",	       m.mmr_unused2[0], m.mmr_unused2[1]);#endif				/* DEBUG_SHOW_UNUSED */	printk(KERN_DEBUG "# correct_nwid: %d, # wrong_nwid: %d\n",	       (m.mmr_correct_nwid_h << 8) | m.mmr_correct_nwid_l,	       (m.mmr_wrong_nwid_h << 8) | m.mmr_wrong_nwid_l);	printk(KERN_DEBUG "thr_pre_set: 0x%x [current signal %s]\n",	       m.mmr_thr_pre_set & MMR_THR_PRE_SET,	       (m.		mmr_thr_pre_set & MMR_THR_PRE_SET_CUR) ? "above" :	       "below");	printk(KERN_DEBUG "signal_lvl: %d [%s], ",	       m.mmr_signal_lvl & MMR_SIGNAL_LVL,	       (m.		mmr_signal_lvl & MMR_SIGNAL_LVL_VALID) ? "new msg" :	       "no new msg");	printk("silence_lvl: %d [%s], ",	       m.mmr_silence_lvl & MMR_SILENCE_LVL,	       (m.		mmr_silence_lvl & MMR_SILENCE_LVL_VALID) ? "update done" :	       "no new update");	printk("sgnl_qual: 0x%x [%s]\n", m.mmr_sgnl_qual & MMR_SGNL_QUAL,	       (m.		mmr_sgnl_qual & MMR_SGNL_QUAL_ANT) ? "Antenna 1" :	       "Antenna 0");#ifdef DEBUG_SHOW_UNUSED	printk(KERN_DEBUG "netw_id_l: %x\n", m.mmr_netw_id_l);#endif				/* DEBUG_SHOW_UNUSED */}				/* wv_mmc_show */#endif				/* DEBUG_MMC_SHOW */#ifdef DEBUG_I82586_SHOW/*------------------------------------------------------------------*//* * Print the last block of the i82586 memory. */static void wv_scb_show(unsigned long ioaddr){	scb_t scb;	obram_read(ioaddr, OFFSET_SCB, (unsigned char *) &scb,		   sizeof(scb));	printk(KERN_DEBUG "##### WaveLAN system control block: #####\n");	printk(KERN_DEBUG "status: ");	printk("stat 0x%x[%s%s%s%s] ",	       (scb.		scb_status & (SCB_ST_CX | SCB_ST_FR | SCB_ST_CNA |			      SCB_ST_RNR)) >> 12,	       (scb.		scb_status & SCB_ST_CX) ? "command completion interrupt," :	       "", (scb.scb_status & SCB_ST_FR) ? "frame received," : "",	       (scb.		scb_status & SCB_ST_CNA) ? "command unit not active," : "",	       (scb.		scb_status & SCB_ST_RNR) ? "receiving unit not ready," :	       "");	printk("cus 0x%x[%s%s%s] ", (scb.scb_status & SCB_ST_CUS) >> 8,	       ((scb.scb_status & SCB_ST_CUS) ==		SCB_ST_CUS_IDLE) ? "idle" : "",	       ((scb.scb_status & SCB_ST_CUS) ==		SCB_ST_CUS_SUSP) ? "suspended" : "",	       ((scb.scb_status & SCB_ST_CUS) ==		SCB_ST_CUS_ACTV) ? "active" : "");	printk("rus 0x%x[%s%s%s%s]\n", (scb.scb_status & SCB_ST_RUS) >> 4,	       ((scb.scb_status & SCB_ST_RUS) ==		SCB_ST_RUS_IDLE) ? "idle" : "",	       ((scb.scb_status & SCB_ST_RUS) ==		SCB_ST_RUS_SUSP) ? "suspended" : "",	       ((scb.scb_status & SCB_ST_RUS) ==		SCB_ST_RUS_NRES) ? "no resources" : "",	       ((scb.scb_status & SCB_ST_RUS) ==		SCB_ST_RUS_RDY) ? "ready" : "");	printk(KERN_DEBUG "command: ");	printk("ack 0x%x[%s%s%s%s] ",	       (scb.		scb_command & (SCB_CMD_ACK_CX | SCB_CMD_ACK_FR |			       SCB_CMD_ACK_CNA | SCB_CMD_ACK_RNR)) >> 12,	       (scb.		scb_command & SCB_CMD_ACK_CX) ? "ack cmd completion," : "",	       (scb.		scb_command & SCB_CMD_ACK_FR) ? "ack frame received," : "",	       (scb.		scb_command & SCB_CMD_ACK_CNA) ? "ack CU not active," : "",	       (scb.		scb_command & SCB_CMD_ACK_RNR) ? "ack RU not ready," : "");	printk("cuc 0x%x[%s%s%s%s%s] ",	       (scb.scb_command & SCB_CMD_CUC) >> 8,	       ((scb.scb_command & SCB_CMD_CUC) ==		SCB_CMD_CUC_NOP) ? "nop" : "",	       ((scb.scb_command & SCB_CMD_CUC) ==		SCB_CMD_CUC_GO) ? "start cbl_offset" : "",	       ((scb.scb_command & SCB_CMD_CUC) ==		SCB_CMD_CUC_RES) ? "resume execution" : "",	       ((scb.scb_command & SCB_CMD_CUC) ==		SCB_CMD_CUC_SUS) ? "suspend execution" : "",	       ((scb.scb_command & SCB_CMD_CUC) ==		SCB_CMD_CUC_ABT) ? "abort execution" : "");	printk("ruc 0x%x[%s%s%s%s%s]\n",	       (scb.scb_command & SCB_CMD_RUC) >> 4,	       ((scb.scb_command & SCB_CMD_RUC) ==		SCB_CMD_RUC_NOP) ? "nop" : "",	       ((scb.scb_command & SCB_CMD_RUC) ==		SCB_CMD_RUC_GO) ? "start rfa_offset" : "",	       ((scb.scb_command & SCB_CMD_RUC) ==		SCB_CMD_RUC_RES) ? "resume reception" : "",	       ((scb.scb_command & SCB_CMD_RUC) ==		SCB_CMD_RUC_SUS) ? "suspend reception" : "",	       ((scb.scb_command & SCB_CMD_RUC) ==		SCB_CMD_RUC_ABT) ? "abort reception" : "");	printk(KERN_DEBUG "cbl_offset 0x%x ", scb.scb_cbl_offset);	printk("rfa_offset 0x%x\n", scb.scb_rfa_offset);	printk(KERN_DEBUG "crcerrs %d ", scb.scb_crcerrs);	printk("alnerrs %d ", scb.scb_alnerrs);	printk("rscerrs %d ", scb.scb_rscerrs);	printk("ovrnerrs %d\n", scb.scb_ovrnerrs);}/*------------------------------------------------------------------*//* * Print the formatted status of the i82586's receive unit. */static void wv_ru_show(struct net_device * dev){	/* net_local *lp = (net_local *) dev->priv; */	printk(KERN_DEBUG	       "##### WaveLAN i82586 receiver unit status: #####\n");	printk(KERN_DEBUG "ru:");	/*	 * Not implemented yet	 */	printk("\n");}				/* wv_ru_show *//*------------------------------------------------------------------*//* * Display info about one control block of the i82586 memory. */static void wv_cu_show_one(struct net_device * dev, net_local * lp, int i, u16 p){	unsigned long ioaddr;	ac_tx_t actx;	ioaddr = dev->base_addr;	printk("%d: 0x%x:", i, p);	obram_read(ioaddr, p, (unsigned char *) &actx, sizeof(actx));	printk(" status=0x%x,", actx.tx_h.ac_status);	printk(" command=0x%x,", actx.tx_h.ac_command);	/*	   {	   tbd_t      tbd;	   obram_read(ioaddr, actx.tx_tbd_offset, (unsigned char *)&tbd, sizeof(tbd));	   printk(" tbd_status=0x%x,", tbd.tbd_status);	   }	 */	printk("|");}/*------------------------------------------------------------------*//* * Print status of the command unit of the i82586. */static void wv_cu_show(struct net_device * dev){	net_local *lp = (net_local *) dev->priv;	unsigned int i;	u16 p;	printk(KERN_DEBUG	       "##### WaveLAN i82586 command unit status: #####\n");	printk(KERN_DEBUG);	for (i = 0, p = lp->tx_first_in_use; i < NTXBLOCKS; i++) {		wv_cu_show_one(dev, lp, i, p);		p += TXBLOCKZ;		if (p >= OFFSET_CU + NTXBLOCKS * TXBLOCKZ)			p -= NTXBLOCKS * TXBLOCKZ;	}	printk("\n");}#endif				/* DEBUG_I82586_SHOW */#ifdef DEBUG_DEVICE_SHOW/*------------------------------------------------------------------*//* * Print the formatted status of the WaveLAN PCMCIA device driver. */static void wv_dev_show(struct net_device * dev){	printk(KERN_DEBUG "dev:");	printk(" state=%lX,", dev->state);	printk(" trans_start=%ld,", dev->trans_start);	printk(" flags=0x%x,", dev->flags);	printk("\n");}				/* wv_dev_show *//*------------------------------------------------------------------*//* * Print the formatted status of the WaveLAN PCMCIA device driver's * private information. */static void wv_local_show(struct net_device * dev){	net_local *lp;	lp = (net_local *) dev->priv;	printk(KERN_DEBUG "local:");	printk(" tx_n_in_use=%d,", lp->tx_n_in_use);	printk(" hacr=0x%x,", lp->hacr);	printk(" rx_head=0x%x,", lp->rx_head);	printk(" rx_last=0x%x,", lp->rx_last);	printk(" tx_first_free=0x%x,", lp->tx_first_free);	printk(" tx_first_in_use=0x%x,", lp->tx_first_in_use);	printk("\n");}				/* wv_local_show */#endif				/* DEBUG_DEVICE_SHOW */#if defined(DEBUG_RX_INFO) || defined(DEBUG_TX_INFO)/*------------------------------------------------------------------*//* * Dump packet header (and content if necessary) on the screen */static inline void wv_packet_info(u8 * p,	/* Packet to dump */				  int length,	/* Length of the packet */				  char *msg1,	/* Name of the device */				  char *msg2){				/* Name of the function */	int i;	int maxi;	printk(KERN_DEBUG	       "%s: %s(): dest %02X:%02X:%02X:%02X:%02X:%02X, length %d\n",	       msg1, msg2, p[0], p[1], p[2], p[3], p[4], p[5], length);	printk(KERN_DEBUG	       "%s: %s(): src %02X:%02X:%02X:%02X:%02X:%02X, type 0x%02X%02X\n",	       msg1, msg2, p[6], p[7], p[8], p[9], p[10], p[11], p[12],	       p[13]);#ifdef DEBUG_PACKET_DUMP	printk(KERN_DEBUG "data=\"");	if ((maxi = length) > DEBUG_PACKET_DUMP)		maxi = DEBUG_PACKET_DUMP;	for (i = 14; i < maxi; i++)		if (p[i] >= ' ' && p[i] <= '~')			printk(" %c", p[i]);		else			printk("%02X", p[i]);	if (maxi < length)		printk("..");	printk("\"\n");	printk(KERN_DEBUG "\n");#endif				/* DEBUG_PACKET_DUMP */}#endif				/* defined(DEBUG_RX_INFO) || defined(DEBUG_TX_INFO) *//*------------------------------------------------------------------*//* * This is the information which is displayed by the driver at startup. * There are lots of flags for configuring it to your liking. */static inline void wv_init_info(struct net_device * dev){	short ioaddr = dev->base_addr;	net_local *lp = (net_local *) dev->priv;	psa_t psa;	int i;	/* Read the parameter storage area */	psa_read(ioaddr, lp->hacr, 0, (unsigned char *) &psa, sizeof(psa));#ifdef DEBUG_PSA_SHOW	wv_psa_show(&psa);#endif#ifdef DEBUG_MMC_SHOW	wv_mmc_show(dev);#endif#ifdef DEBUG_I82586_SHOW	wv_cu_show(dev);#endif#ifdef DEBUG_BASIC_SHOW	/* Now, let's go for the basic stuff. */	printk(KERN_NOTICE "%s: WaveLAN at %#x,", dev->name, ioaddr);	for (i = 0; i < WAVELAN_ADDR_SIZE; i++)		printk("%s%02X", (i == 0) ? " " : ":", dev->dev_addr[i]);	printk(", IRQ %d", dev->irq);	/* Print current network ID. */	if (psa.psa_nwid_select)		printk(", nwid 0x%02X-%02X", psa.psa_nwid[0],		       psa.psa_nwid[1]);	else		printk(", nwid off");	/* If 2.00 card */	if (!(mmc_in(ioaddr, mmroff(0, mmr_fee_status)) &	      (MMR_FEE_STATUS_DWLD | MMR_FEE_STATUS_BUSY))) {		unsigned short freq;		/* Ask the EEPROM to read the frequency from the first area. */		fee_read(ioaddr, 0x00, &freq, 1);		/* Print frequency */		printk(", 2.00, %ld", (freq >> 6) + 2400L);		/* Hack! */		if (freq & 0x20)			printk(".5");	} else {		printk(", PC");		switch (psa.psa_comp_number) {		case PSA_COMP_PC_AT_915:		case PSA_COMP_PC_AT_2400:			printk("-AT");			break;		case PSA_COMP_PC_MC_915:		case PSA_COMP_PC_MC_2400:			printk("-MC");			break;		case PSA_COMP_PCMCIA_915:			printk("MCIA");			break;		default:			printk("?");		}		printk(", ");		switch (psa.psa_subband) {		case PSA_SUBBAND_915:			printk("915");			break;		case PSA_SUBBAND_2425:			printk("2425");			break;		case PSA_SUBBAND_2460:			printk("2460");			break;		case PSA_SUBBAND_2484:			printk("2484");			break;		case PSA_SUBBAND_2430_5:			printk("2430.5");			break;		default:			printk("?");		}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -