|
|
1.1 ! root 1: Autoconfig questions ! 2: ! 3: * NRW spec, IO Subsystem implies that 'device n' stuff is all relative to ! 4: slot. But...all of this stuff is hard wired to slot 15! Should we ! 5: assume that this stuff could work the same in other slots? Should autoconfig ! 6: be able to deal with NRW-type devices in other slots? ! 7: ! 8: mapping dev_type to executable ! 9: -- dev_type = 32 bit number - 16 bits of type, 16 bits of rev ! 10: == TTTTRRRR ! 11: ! 12: -- executables named dev_XXXXYYYY_<any_text> ! 13: XXXX = type, in ASCII hex. Must match TYPE exactly ! 14: YYYY = rev, in ASCII hex. Any digit can be '*'. ! 15: ! 16: -- multiple links to a given executable allow multiple dev_ports mapped ! 17: into one executable. ! 18: ! 19: -- multiple dev slots with same dev_type allow multiple exec's of one ! 20: executable. ! 21: ! 22: -- Ports advertised in bootstrap server subset by config as ! 23: dev_port_TTTT. ! 24: ! 25: -- autoconfig searches <driver_directory> for: ! 26: -- XXXX must = TTTT. ! 27: -- Then, in order: ! 28: -- RRRR == YYYY ! 29: -- RRRR == YY** ! 30: -- RRRR == Y*** ! 31: -- RRRR == **** ! 32: ! 33: struct dev_entry { ! 34: struct { // one for each type associated ! 35: port_t dev_port; // with this executable ! 36: int dev_type; ! 37: } entry[many]; ! 38: int executable_fid; // only one ! 39: char *one_executable_file_name; // one of possibly many ! 40: }; ! 41: ! 42: autoconfig main ! 43: { ! 44: register host_priv_port to get privileges; ! 45: map in entire physical address space (somehow); ! 46: ! 47: for each device in DMA configuration page for each of three slots { ! 48: examine dev_type; ! 49: find executable for that dev_type; ! 50: if none ! 51: continue to next device slot; ! 52: get dev_port from kernel for that device #; ! 53: if any dev_entries with this dev_type ! 54: make a new dev_entry; ! 55: else if any dev_entries with this executable_fid ! 56: add this dev_port, dev_type to that dev_entry; ! 57: else ! 58: make a new dev_entry; ! 59: } ! 60: for each dev_entry { ! 61: make a new bootstrap subset; ! 62: advertise each entry.dev_port in bootstrap server ! 63: as dev_port_TTTT under subst port; ! 64: exec(executable) with bootstrap = subset_port; ! 65: } ! 66: } ! 67: ! 68: device driver task ! 69: { ! 70: for each dev_type needed { ! 71: get bootstrap:dev_port_TTTT ! 72: dev_reg_map(dev_port_TTTT, **reg_ptr_TTTT); ! 73: } ! 74: [driver probe:dev_port reg_ptr:reg_ptr]; ! 75: ...or...this is device-specific.... ! 76: [driver probe:dev_port_TTTT ! 77: next_port:dev_port_UUUU ! 78: reg_ptr1:reg_ptr_1 ! 79: reg_ptr2:reg_ptr_2]; ! 80: /* TBD */ ! 81: } ! 82:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.