/*===============================================================*\ | Project: RTEMS PC386 IDE harddisc driver tables | +-----------------------------------------------------------------+ | File: idecfg.c | +-----------------------------------------------------------------+ | Copyright (c) 2003 IMD | | Ingenieurbuero fuer Microcomputertechnik Th. Doerfler | | | | all rights reserved | +-----------------------------------------------------------------+ | this file contains the table of functions for the BSP layer | | for IDE access below the libchip IDE harddisc driver | | | +-----------------------------------------------------------------+ | date history ID | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 01.14.03 creation doe | \*===============================================================*/ #include #include #include #include #include extern bool pc386_ide_show; /* * The following table configures the functions used for IDE drivers * in this BSP. */ /* * The following table configures the IDE drivers used in this BSP. */ extern ide_ctrl_fns_t pc386_ide_ctrl_fns; /* IDE controllers Table */ ide_controller_bsp_table_t IDE_Controller_Table[] = { {"/dev/ide0", IDE_STD, /* standard IDE controller */ &pc386_ide_ctrl_fns, NULL, /* probe for IDE standard registers */ FALSE, /* not (yet) initialized */ 0x1f0, /* base I/O address for first IDE controller */ FALSE,0, /* not (yet) interrupt driven */ NULL } , /* colon only needed when both interfaces present */ {"/dev/ide1", IDE_STD, /* standard IDE controller */ &pc386_ide_ctrl_fns, NULL, /* probe for IDE standard registers */ FALSE, /* not (yet) initialized */ 0x170, /* base I/O address for second IDE controller */ FALSE,0, /* not (yet) interrupt driven */ NULL } }; /* Number of rows in IDE_Controller_Table. Default is 0. */ unsigned long IDE_Controller_Count; #if IDE_USE_PRIMARY_INTERFACE #define IDE1_DEFAULT true #else #define IDE1_DEFAULT false #endif #if IDE_USE_SECONDARY_INTERFACE #define IDE2_DEFAULT true #else #define IDE2_DEFAULT false #endif void bsp_ide_cmdline_init(void) { const char* ide_disable; ide_disable = bsp_cmdline_arg ("--ide-disable"); if (ide_disable == NULL) { bool ide1 = IDE1_DEFAULT; bool ide2 = IDE2_DEFAULT; const char* ide; /* * Can have: * --ide=0,1 */ ide = bsp_cmdline_arg ("--ide="); if (ide) { int i; /* * If a command line option exists remove the defaults. */ ide1 = ide2 = false; ide += sizeof ("--ide=") - 1; for (i = 0; i < 3; i++) { switch (ide[i]) { case '0': ide1 = true; break; case '1': ide2 = true; break; case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ',': break; default: break; } } } if (ide2 && !ide1) IDE_Controller_Table[0] = IDE_Controller_Table[1]; if (ide1) IDE_Controller_Count++; if (ide2) IDE_Controller_Count++; /* * Allow the user to get the initialise to print probing * type information. */ ide = bsp_cmdline_arg ("--ide-show"); if (ide) pc386_ide_show = true; } }