diff options
Diffstat (limited to 'bsps/i386/pc386/ata/idecfg.c')
-rw-r--r-- | bsps/i386/pc386/ata/idecfg.c | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/bsps/i386/pc386/ata/idecfg.c b/bsps/i386/pc386/ata/idecfg.c new file mode 100644 index 0000000000..371a6eea53 --- /dev/null +++ b/bsps/i386/pc386/ata/idecfg.c @@ -0,0 +1,145 @@ +/*===============================================================*\ +| Project: RTEMS PC386 IDE harddisc driver tables | ++-----------------------------------------------------------------+ +| File: idecfg.c | ++-----------------------------------------------------------------+ +| Copyright (c) 2003 IMD | +| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler | +| <Thomas.Doerfler@imd-systems.de> | +| 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 <rtems.h> +#include <bsp.h> +#include <libchip/ide_ctrl.h> +#include <libchip/ide_ctrl_cfg.h> +#include <libchip/ide_ctrl_io.h> + +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; + } +} |