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

📄 dump_exca.c

📁 pcmcia source code
💻 C
📖 第 1 页 / 共 2 页
字号:
}static void dump_timing(proc_exca *ex, int i){    printf("  Timing set %d: ", i);    print_time("setup", ex->reg.b[PD67_TIME_SETUP(i)]);    print_time(", command", ex->reg.b[PD67_TIME_CMD(i)]);    print_time(", recovery", ex->reg.b[PD67_TIME_RECOV(i)]);    printf("\n");}void dump_ext(proc_exca *ex){    u_char v;    printf("  Extension registers:");    printf("    ");    v = ex->ext[PD67_DATA_MASK0];    printf("mask 0 = 0x%02x", v);    v = ex->reg.b[PD67_DATA_MASK1];    printf(", mask 1 = 0x%02x", v);    v = ex->reg.b[PD67_DMA_CTL];    printf(", DMA ctl = 0x%02x", v);    switch (v & PD67_DMA_MODE) {    case PD67_DMA_OFF:	printf(" [off]"); break;    case PD67_DMA_DREQ_INPACK:	printf(" [dreq is inpack]"); break;    case PD67_DMA_DREQ_WP:	printf(" [dreq is wp]"); break;    case PD67_DMA_DREQ_BVD2:	printf(" [dreq is bvd2]"); break;    }    if (v & PD67_DMA_PULLUP)	printf(" [pullup]");    printf("\n");}/*====================================================================*//* Vadem-specific registers */static void dump_vsense(proc_exca *ex){    int v = ex->reg.b[VG469_VSENSE];    printf("  Card voltage sense = 0x%02x\n   ", v);    if (v & VG469_VSENSE_A_VS1) printf(" [a_vs1]");    if (v & VG469_VSENSE_A_VS2) printf(" [a_vs2]");    if (v & VG469_VSENSE_B_VS1) printf(" [b_vs1]");    if (v & VG469_VSENSE_B_VS2) printf(" [b_vs2]");    printf("\n");}static void dump_vselect(proc_exca *ex){    int v = ex->reg.b[VG469_VSELECT];    printf("  Card voltage select = 0x%02x\n   ", v);    switch (v & VG469_VSEL_VCC) {    case 0: printf(" [Vcc=5v]"); break;    case 1: printf(" [Vcc=3.3v]"); break;    case 2: printf(" [Vcc=X.Xv]"); break;    case 3: printf(" [Vcc=3.3v]"); break;    }    switch (v & VG469_VSEL_MAX) {    case 0: printf(" [Vmax=5v]"); break;    case 1: printf(" [Vmax=3.3v]"); break;    case 2: printf(" [Vmax=X.Xv]"); break;    case 3: printf(" [Vcc=3.3v]"); break;    }    if (v & VG469_VSEL_EXT_STAT) printf(" [extended]");    if (v & VG469_VSEL_EXT_BUS) printf(" [buffer]");    if (v & VG469_VSEL_MIXED)	printf(" [mixed]");    else	printf(" [5v only]");    if (v & VG469_VSEL_ISA)	printf(" [3v bus]");    else	printf(" [5v bus]");    printf("\n");}static void dump_control(proc_exca *ex){    int v = ex->reg.b[VG468_CTL];    printf("  Control register = 0x%02x\n   ", v);    if (v & VG468_CTL_SLOW) printf(" [slow]");    if (v & VG468_CTL_ASYNC) printf(" [async]");    if (v & VG468_CTL_TSSI) printf(" [tri-state]");    if (v & VG468_CTL_DELAY) printf(" [debounce]");    if (v & VG469_CTL_STRETCH) printf(" [stretch]");    if (v & VG468_CTL_INPACK) printf(" [inpack]");    if (v & VG468_CTL_POLARITY)	printf(" [active high]");    else	printf(" [active low]");    if (v & VG468_CTL_COMPAT) printf(" [compat]");    printf("\n");}static void dump_misc(proc_exca *ex){    int v = ex->reg.b[VG468_MISC];    printf("  Misc register = 0x%02x\n   ", v);    if (v & VG468_MISC_GPIO) printf(" [gpio]");    if (v & VG468_MISC_DMAWSB) printf(" [DMA ws]");    if (v & VG469_MISC_LEDENA) printf(" [LED ena]");    if (v & VG468_MISC_VADEMREV) printf(" [Vadem rev]");    if (v & VG468_MISC_UNLOCK) printf(" [unlock]");    printf("\n");}static void dump_ext_mode(proc_exca *ex, proc_info *in){    int v = ex->reg.b[VG469_EXT_MODE];    printf("  Extended mode %c = 0x%02x\n   ",	   (in->psock ? 'B' : 'A'), v);    if (in->psock) {	if (v & VG469_MODE_B_3V) printf(" [3.3v sock B]");    } else {	if (v & VG469_MODE_INT_SENSE) printf(" [int sense]");	if (v & VG469_MODE_CABLE) printf(" [cable mode]");	if (v & VG469_MODE_COMPAT) printf(" [DF compat]");	if (v & VG469_MODE_TEST) printf(" [test]");	if (v & VG469_MODE_RIO) printf(" [RIO to INTR]");    }    printf("\n");}/*====================================================================*/static void dump_memwin(proc_exca *ex, proc_info *in, int w){    u_int start, stop, off;    char flags[50];    start = ex->reg.w[(I365_MEM(w)+I365_W_START)>>1];    stop = ex->reg.w[(I365_MEM(w)+I365_W_STOP)>>1];    off = ex->reg.w[(I365_MEM(w)+I365_W_OFF)>>1];    if (ex->reg.b[I365_ADDRWIN] & I365_ENA_MEM(w))	strcpy(flags, " [on]");    else	strcpy(flags, " [off]");    if (start & I365_MEM_16BIT)	strcat(flags, " [16bit]");    else	strcat(flags, " [8bit]");    if (in->flags & IS_CIRRUS) {	if (stop & I365_MEM_WS1)	    strcat(flags, " [time1]");	else	    strcat(flags, " [time0]");    } else {	if (start & I365_MEM_0WS) strcat(flags, " [0ws]");	if (stop & I365_MEM_WS1) strcat(flags, " [ws1]");	if (stop & I365_MEM_WS0) strcat(flags, " [ws0]");    }    if (off & I365_MEM_WRPROT) strcat(flags, " [wrprot]");    if (off & I365_MEM_REG) strcat(flags, " [reg]");    start = (start & 0x0fff) << 12;    stop = ((stop & 0x0fff) << 12) + 0x0fff;    off = (off & 0x3fff) << 12;    start += ex->reg.b[CB_MEM_PAGE(w)]<<24;    stop += ex->reg.b[CB_MEM_PAGE(w)]<<24;    off = (off+start) & 0x3ffffff;    printf("  memory %d: 0x%04x-0x%04x @ 0x%08x%s\n",	   w, off, off+stop-start, start, flags);}static void dump_iowin(proc_exca *ex, proc_info *in, int w){    u_short ctl, off = 0;    if (in->flags & IS_CIRRUS)	off = ex->reg.w[PD67_IO_OFF(w)>>1];    printf("  io %d: 0x%04x-0x%04x", w,	   off + ex->reg.w[(I365_IO(w)+I365_W_START)>>1],	   off + ex->reg.w[(I365_IO(w)+I365_W_STOP)>>1]);    if (off)	printf(" @ 0x%04x", ex->reg.w[(I365_IO(w)+I365_W_START)>>1]);    if (ex->reg.b[I365_ADDRWIN] & I365_ENA_IO(w))	printf(" [on]");    else	printf(" [off]");        ctl = ex->reg.b[I365_IOCTL];    if (in->flags & IS_CIRRUS) {	if (ctl & I365_IOCTL_WAIT(w))	    printf(" [time1]");	else	    printf(" [time0]");    } else {	if (ctl & I365_IOCTL_WAIT(w)) printf(" [wait]");	if (ctl & I365_IOCTL_0WS(w)) printf(" [0ws]");    }    if (ctl & I365_IOCTL_IOCS16(w)) printf(" [iocs16]");    if (ctl & I365_IOCTL_16BIT(w))	printf(" [16bit]\n");    else	printf(" [8bit]\n");}/*====================================================================*/void dump_sock(proc_exca *ex, proc_info *in){    int i;    printf("  Identification and revision = 0x%02x\n",	   ex->reg.b[I365_IDENT]);    if (in->flags & IS_CIRRUS)	printf("  Chip information = 0x%02x\n",	       ex->reg.b[PD67_CHIP_INFO]);    dump_status(ex);    dump_power(ex);    if (in->flags & IS_VG469)	dump_vselect(ex);    dump_intctl(ex);    dump_csc(ex);    dump_cscint(ex);    if (in->flags & IS_CIRRUS) {	dump_misc1(ex);	dump_misc2(ex);    } else {	dump_genctl(ex);	dump_gblctl(ex);    }    if (in->flags & IS_VG469) {	dump_vsense(ex);	dump_ext_mode(ex, in);    }    if ((in->flags & IS_VG468) || (in->flags & IS_VG469)) {	dump_control(ex);	dump_misc(ex);    }        for (i = 0; i < 5; i++)	dump_memwin(ex, in, i);    for (i = 0; i < 2; i++)	dump_iowin(ex, in, i);        if (in->flags & IS_CIRRUS) {	for (i = 0; i < 2; i++)	    dump_timing(ex, i);	dump_ext(ex);    }    printf("\n");} /* dump_sock *//*====================================================================*/int main(int argc, char *argv[]){    char fn[100];    int i;    proc_exca *ex;    proc_info *in;    if (access("/proc/bus/pccard", R_OK) != 0)	fprintf(stderr, "/proc/bus/pccard does not exist!\n");    for (i = 0; ; i++) {	sprintf(fn, "/proc/bus/pccard/%02d/exca", i);	if (access(fn, R_OK) != 0)	    break;	ex = load_exca(fn);	sprintf(fn, "/proc/bus/pccard/%02d/info", i);	in = load_info(fn);	printf("Socket %d:\n", i);	dump_sock(ex, in);    }    return 0;}

⌨️ 快捷键说明

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