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

📄 i82365.c

📁 linux下从网卡远程启动
💻 C
📖 第 1 页 / 共 2 页
字号:
	return;}int	deinit_i82365(void) {	printf("Deinitializing i82365\n" );	return 0;}/*static int i365_get_status(u_short sock, u_int *value){    u_int status;    status = i365_get(sock, I365_STATUS);    *value = ((status & I365_CS_DETECT) == I365_CS_DETECT)        ? SS_DETECT : 0;    if (i365_get(sock, I365_INTCTL) & I365_PC_IOCARD)        *value |= (status & I365_CS_STSCHG) ? 0 : SS_STSCHG;    else {        *value |= (status & I365_CS_BVD1) ? 0 : SS_BATDEAD;        *value |= (status & I365_CS_BVD2) ? 0 : SS_BATWARN;    }    *value |= (status & I365_CS_WRPROT) ? SS_WRPROT : 0;    *value |= (status & I365_CS_READY) ? SS_READY : 0;    *value |= (status & I365_CS_POWERON) ? SS_POWERON : 0;#ifdef CONFIG_ISA    if (pccsock[sock].type == IS_VG469) {        status = i365_get(sock, VG469_VSENSE);        if (pccsock[sock].internalid & 1) {            *value |= (status & VG469_VSENSE_B_VS1) ? 0 : SS_3VCARD;            *value |= (status & VG469_VSENSE_B_VS2) ? 0 : SS_XVCARD;        } else {            *value |= (status & VG469_VSENSE_A_VS1) ? 0 : SS_3VCARD;            *value |= (status & VG469_VSENSE_A_VS2) ? 0 : SS_XVCARD;        }    }#endif    printf("i82365: GetStatus(%d) = %#4.4x\n", sock, *value);    return 0;} //i365_get_status*//*static int i365_set_socket(u_short sock, socket_state_t *state){    socket_info_t *t = &socket[sock];    u_char reg;    printf("i82365: SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "          "io_irq %d, csc_mask %#2.2x)\n", sock, state->flags,          state->Vcc, state->Vpp, state->io_irq, state->csc_mask);printf ("\nERROR:UNIMPLEMENTED\n" );return 0;    // First set global controller options     // set_bridge_state(sock); *TODO* check: need this here?    // IO card, RESET flag, IO interrupt     reg = t->intr;    if (state->io_irq != t->cap.pci_irq) reg |= state->io_irq;    reg |= (state->flags & SS_RESET) ? 0 : I365_PC_RESET;    reg |= (state->flags & SS_IOCARD) ? I365_PC_IOCARD : 0;    i365_set(sock, I365_INTCTL, reg);    reg = I365_PWR_NORESET;    if (state->flags & SS_PWR_AUTO) reg |= I365_PWR_AUTO;    if (state->flags & SS_OUTPUT_ENA) reg |= I365_PWR_OUT;    if (t->flags & IS_CIRRUS) {        if (state->Vpp != 0) {            if (state->Vpp == 120)                reg |= I365_VPP1_12V;            else if (state->Vpp == state->Vcc)                reg |= I365_VPP1_5V;            else return -EINVAL;        }        if (state->Vcc != 0) {            reg |= I365_VCC_5V;            if (state->Vcc == 33)                i365_bset(sock, PD67_MISC_CTL_1, PD67_MC1_VCC_3V);            else if (state->Vcc == 50)                i365_bclr(sock, PD67_MISC_CTL_1, PD67_MC1_VCC_3V);            else return -EINVAL;        }    } else if (t->flags & IS_VG_PWR) {        if (state->Vpp != 0) {            if (state->Vpp == 120)                reg |= I365_VPP1_12V;            else if (state->Vpp == state->Vcc)                reg |= I365_VPP1_5V;            else return -EINVAL;        }       if (state->Vcc != 0) {            reg |= I365_VCC_5V;            if (state->Vcc == 33)                i365_bset(sock, VG469_VSELECT, VG469_VSEL_VCC);            else if (state->Vcc == 50)                i365_bclr(sock, VG469_VSELECT, VG469_VSEL_VCC);            else return -EINVAL;        }    } else if (t->flags & IS_DF_PWR) {        switch (state->Vcc) {        case 0:         break;        case 33:        reg |= I365_VCC_3V; break;        case 50:        reg |= I365_VCC_5V; break;        default:        return -EINVAL;        }        switch (state->Vpp) {        case 0:         break;        case 50:        reg |= I365_VPP1_5V; break;        case 120:       reg |= I365_VPP1_12V; break;        default:        return -EINVAL;        }    } else {        switch (state->Vcc) {        case 0:         break;        case 50:        reg |= I365_VCC_5V; break;        default:        return -EINVAL;        }        switch (state->Vpp) {        case 0:         break;        case 50:        reg |= I365_VPP1_5V | I365_VPP2_5V; break;        case 120:       reg |= I365_VPP1_12V | I365_VPP2_12V; break;        default:        return -EINVAL;        }    }    if (reg != i365_get(sock, I365_POWER))        i365_set(sock, I365_POWER, reg);    // Chipset-specific functions     if (t->flags & IS_CIRRUS) {        // Speaker control         i365_bflip(sock, PD67_MISC_CTL_1, PD67_MC1_SPKR_ENA,                   state->flags & SS_SPKR_ENA);    }    // Card status change interrupt mask     reg = t->cs_irq << 4;    if (state->csc_mask & SS_DETECT) reg |= I365_CSC_DETECT;    if (state->flags & SS_IOCARD) {        if (state->csc_mask & SS_STSCHG) reg |= I365_CSC_STSCHG;    } else {        if (state->csc_mask & SS_BATDEAD) reg |= I365_CSC_BVD1;        if (state->csc_mask & SS_BATWARN) reg |= I365_CSC_BVD2;        if (state->csc_mask & SS_READY) reg |= I365_CSC_READY;    }    i365_set(sock, I365_CSCINT, reg);    i365_get(sock, I365_CSC);    return 0;} // i365_set_socket *//*static int i365_get_io_map(u_short sock, struct pccard_io_map *io){    u_char map, ioctl, addr;	printf ( "GETIOMAP unimplemented\n" ); return 0;    map = io->map;    if (map > 1) return -EINVAL;    io->start = i365_get_pair(sock, I365_IO(map)+I365_W_START);    io->stop = i365_get_pair(sock, I365_IO(map)+I365_W_STOP);    ioctl = i365_get(sock, I365_IOCTL);    addr = i365_get(sock, I365_ADDRWIN);    io->speed = to_ns(ioctl & I365_IOCTL_WAIT(map)) ? 1 : 0;    io->flags  = (addr & I365_ENA_IO(map)) ? MAP_ACTIVE : 0;    io->flags |= (ioctl & I365_IOCTL_0WS(map)) ? MAP_0WS : 0;    io->flags |= (ioctl & I365_IOCTL_16BIT(map)) ? MAP_16BIT : 0;    io->flags |= (ioctl & I365_IOCTL_IOCS16(map)) ? MAP_AUTOSZ : 0;    printf("i82365: GetIOMap(%d, %d) = %#2.2x, %d ns, "          "%#4.4x-%#4.4x\n", sock, map, io->flags, io->speed,          io->start, io->stop);    return 0;} // i365_get_io_map *//*====================================================================*//*static int i365_set_io_map(u_short sock, struct pccard_io_map *io){    u_char map, ioctl;    printf("i82365: SetIOMap(%d, %d, %#2.2x, %d ns, "          "%#4.4x-%#4.4x)\n", sock, io->map, io->flags,          io->speed, io->start, io->stop);printf ( "UNIMPLEMENTED\n" );	return 0;    map = io->map;    //if ((map > 1) || (io->start > 0xffff) || (io->stop > 0xffff) ||    if ((map > 1) ||        (io->stop < io->start)) return -EINVAL;    // Turn off the window before changing anything     if (i365_get(sock, I365_ADDRWIN) & I365_ENA_IO(map))        i365_bclr(sock, I365_ADDRWIN, I365_ENA_IO(map));    i365_set_pair(sock, I365_IO(map)+I365_W_START, io->start);    i365_set_pair(sock, I365_IO(map)+I365_W_STOP, io->stop);    ioctl = i365_get(sock, I365_IOCTL) & ~I365_IOCTL_MASK(map);    if (io->speed) ioctl |= I365_IOCTL_WAIT(map);    if (io->flags & MAP_0WS) ioctl |= I365_IOCTL_0WS(map);    if (io->flags & MAP_16BIT) ioctl |= I365_IOCTL_16BIT(map);    if (io->flags & MAP_AUTOSZ) ioctl |= I365_IOCTL_IOCS16(map);    i365_set(sock, I365_IOCTL, ioctl);    // Turn on the window if necessary     if (io->flags & MAP_ACTIVE)        i365_bset(sock, I365_ADDRWIN, I365_ENA_IO(map));    return 0;} // i365_set_io_map *//*static int i365_set_mem_map(u_short sock, struct pccard_mem_map *mem){    u_short base, i;    u_char map;    printf("i82365: SetMemMap(%d, %d, %#2.2x, %d ns, %#5.5lx-%#5.5"          "lx, %#5.5x)\n", sock, mem->map, mem->flags, mem->speed,          mem->sys_start, mem->sys_stop, mem->card_start);printf ( "UNIMPLEMENTED\n" );	return 0;    map = mem->map;    if ((map > 4) || (mem->card_start > 0x3ffffff) ||        (mem->sys_start > mem->sys_stop) || (mem->speed > 1000))        return -EINVAL;    if (!(socket[sock].flags & IS_PCI) &&        ((mem->sys_start > 0xffffff) || (mem->sys_stop > 0xffffff)))        return -EINVAL;    // Turn off the window before changing anything     if (i365_get(sock, I365_ADDRWIN) & I365_ENA_MEM(map))        i365_bclr(sock, I365_ADDRWIN, I365_ENA_MEM(map));    base = I365_MEM(map);    i = (mem->sys_start >> 12) & 0x0fff;    if (mem->flags & MAP_16BIT) i |= I365_MEM_16BIT;    if (mem->flags & MAP_0WS) i |= I365_MEM_0WS;    i365_set_pair(sock, base+I365_W_START, i);    i = (mem->sys_stop >> 12) & 0x0fff;    switch (to_cycles(mem->speed)) {    case 0:     break;    case 1:     i |= I365_MEM_WS0; break;    case 2:     i |= I365_MEM_WS1; break;    default:    i |= I365_MEM_WS1 | I365_MEM_WS0; break;    }    i365_set_pair(sock, base+I365_W_STOP, i);    i = ((mem->card_start - mem->sys_start) >> 12) & 0x3fff;    if (mem->flags & MAP_WRPROT) i |= I365_MEM_WRPROT;    if (mem->flags & MAP_ATTRIB) i |= I365_MEM_REG;    i365_set_pair(sock, base+I365_W_OFF, i);    // Turn on the window if necessary     if (mem->flags & MAP_ACTIVE)        i365_bset(sock, I365_ADDRWIN, I365_ENA_MEM(map));    return 0;} // i365_set_mem_map */int	i82365_interfacer ( interface_func_t func, int sockno, int par1, int par2, void* par3 ) {	//int	i, j, k;	//u_int	ui;	u_char *upc;	struct pcc_config_t * pccc;	switch ( func ) {	  case	INIT:		mydriverid = par1;		return	init_i82365();	  case	SHUTDOWN:		i365_set(sockno, I365_ADDRWIN, i365_get(sockno, I365_ADDRWIN) & 0x20 );		i365_set(sockno, I365_INTCTL, 0x05 );		sleepticks(2);		i365_set(sockno,I365_INTCTL, 0x45 ); //no-reset, memory-card		break;	  case	MAPATTRMEM:		i365_set(sockno,I365_POWER, 0xb1 );		i365_set(sockno, I365_INTCTL, 0x05 );		sleepticks(2);		i365_set(sockno,I365_INTCTL, 0x45 ); //no-reset, memory-card		i365_set(sockno, I365_ADDRWIN, i365_get(sockno, I365_ADDRWIN) & 0x20 );		//i365_bclr(sockno, I365_ADDRWIN, 1 );		i365_set(sockno, I365_MEM(0)+0, ( par1 >> 12 )& 0xff ); //start		i365_set(sockno, I365_MEM(0)+1, ( par1 >> 20 ) & 0x0f );		i365_set(sockno, I365_MEM(0)+2, ((par1 + par2 - 1 ) >> 12 ) & 0xff ); //end		i365_set(sockno, I365_MEM(0)+3, (( par1 + par2 - 1 ) >> 20 ) & 0x0f  );		i365_set(sockno, I365_MEM(0)+4, ((0x4000000 - par1) >> 12) & 0xff ); //offset low		i365_set(sockno, I365_MEM(0)+5, 0x40 | (((0x40000000 - par1) >> 12) & 0x3f));		i365_bset(sockno, I365_ADDRWIN, 1 );		if ( ! ( 1 & i365_get ( sockno, I365_ADDRWIN ) ) ) return 1;		break;	  case	UNMAPATTRMEM:		i365_set(sockno, I365_ADDRWIN, i365_get(sockno, I365_ADDRWIN) & 0x20 );		i365_set(sockno,I365_INTCTL, 0x45 ); //no-reset, memory-card		break;	  case	SELECTCONFIG:	// Params: par1: config number; par3 config pointer pointer		if ( 0 > pccsock[sockno].configoffset ) return 1;		if ( NULL == (pccc = par3 ) ) return 2;		// write config number to 		upc = ioremap ( MAP_ATTRMEM_TO, MAP_ATTRMEM_LEN );		if ( pccsock[sockno].configoffset > MAP_ATTRMEM_LEN ) return 3;		if ( ( par1 & 0x7fffffc0 ) ) return 4;		if ( pccc->index != par1 ) return 5;		upc[pccsock[sockno].configoffset] = ( upc[pccsock[sockno].configoffset] & 0xc0 ) | ( par1 & 0x3f );		i365_set(sockno, I365_IOCTL, (i365_get(sockno, I365_IOCTL) & 0xfe) | 0x20 );	// 16bit autosize		i365_set(sockno, I365_IO(0)+0, pccc->iowin & 0xff);		i365_set(sockno, I365_IO(0)+1, (pccc->iowin >> 8) & 0xff);		i365_set(sockno, I365_IO(0)+2, (pccc->iowin+pccc->iolen - 1) & 0xff);		i365_set(sockno, I365_IO(0)+3, ((pccc->iowin+pccc->iolen- 1) >> 8) & 0xff);		// Disable mem mapping		i365_bclr(sockno, I365_ADDRWIN, 1);		i365_set(sockno, I365_INTCTL, 0x65);		i365_bset(sockno, I365_ADDRWIN,0x40);		break;	  default:		return	-1; // ERROR: Unknown function called	}	return	0;}// get_mem_map[1320]// cirrus_get_state/set/opts...// vg46x_get_state/...// get_bridge_state/...

⌨️ 快捷键说明

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