Annotation of qemu/roms/openbios/utils/ofclient/of1275.c, revision 1.1

1.1     ! root        1: 
        !             2: #include "of1275.h"
        !             3: #include "endian.h"
        !             4: static int (*of1275_server) (void *) = (int (*)(void *)) -1;
        !             5: 
        !             6: _start(void *residual_data_structure,
        !             7:        void *program_entry_point,
        !             8:        int (*client_interface_handler) (void *), void *args, int argslen)
        !             9: {
        !            10:        int status;
        !            11:        of1275_server = client_interface_handler;
        !            12:        status = main();
        !            13:        of1275_exit(status);
        !            14: }
        !            15: 
        !            16: /* 6.3.2.1 Client interface */
        !            17: 
        !            18: 
        !            19: int of1275_test(const char *name, int *missing)
        !            20: {
        !            21:        int result;
        !            22:        static of1275_test_service s;
        !            23:        s.service = "test";
        !            24:        s.n_args = 1;
        !            25:        s.n_returns = 1;
        !            26:        s.name = name;
        !            27:        result = of1275_server(&s);
        !            28:        *missing = s.missing;
        !            29:        return result;
        !            30: }
        !            31: 
        !            32: 
        !            33: /* 6.3.2.2 Device tree */
        !            34: 
        !            35: 
        !            36: int of1275_peer(int phandle, int *sibling_phandle)
        !            37: {
        !            38:        int result;
        !            39:        static of1275_peer_service s;
        !            40:        s.service = "peer";
        !            41:        s.n_args = 1;
        !            42:        s.n_returns = 1;
        !            43:        s.phandle = phandle;
        !            44:        result = of1275_server(&s);
        !            45:        *sibling_phandle = s.sibling_phandle;
        !            46:        return result;
        !            47: }
        !            48: 
        !            49: int of1275_child(int phandle, int *child_phandle)
        !            50: {
        !            51:        int result;
        !            52:        static of1275_child_service s;
        !            53:        s.service = "child";
        !            54:        s.n_args = 1;
        !            55:        s.n_returns = 1;
        !            56:        s.phandle = phandle;
        !            57:        result = of1275_server(&s);
        !            58:        *child_phandle = s.child_phandle;
        !            59:        return result;
        !            60: }
        !            61: 
        !            62: int of1275_parent(int phandle, int *parent_phandle)
        !            63: {
        !            64:        int result;
        !            65:        static of1275_parent_service s;
        !            66:        s.service = "parent";
        !            67:        s.n_args = 1;
        !            68:        s.n_returns = 1;
        !            69:        s.phandle = phandle;
        !            70:        result = of1275_server(&s);
        !            71:        *parent_phandle = s.parent_phandle;
        !            72:        return result;
        !            73: }
        !            74: 
        !            75: int of1275_instance_to_package(int ihandle, int *phandle)
        !            76: {
        !            77:        int result;
        !            78:        static of1275_instance_to_package_service s;
        !            79:        s.service = "instance-to-package";
        !            80:        s.n_args = 1;
        !            81:        s.n_returns = 1;
        !            82:        s.ihandle = ihandle;
        !            83:        result = of1275_server(&s);
        !            84:        *phandle = s.phandle;
        !            85:        return result;
        !            86: }
        !            87: 
        !            88: int of1275_getproplen(int phandle, const char *name, int *proplen)
        !            89: {
        !            90:        int result;
        !            91:        static of1275_getproplen_service s;
        !            92:        s.service = "getproplen";
        !            93:        s.n_args = 2;
        !            94:        s.n_returns = 1;
        !            95:        s.phandle = phandle;
        !            96:        s.name = name;
        !            97:        result = of1275_server(&s);
        !            98:        *proplen = s.proplen;
        !            99:        return result;
        !           100: }
        !           101: 
        !           102: int
        !           103: of1275_getprop(int phandle, const char *name, void *buf, int buflen,
        !           104:               int *size)
        !           105: {
        !           106:        int result;
        !           107:        static of1275_getprop_service s;
        !           108:        s.service = "getprop";
        !           109:        s.n_args = 4;
        !           110:        s.n_returns = 1;
        !           111:        s.phandle = phandle;
        !           112:        s.name = name;
        !           113:        s.buf = buf;
        !           114:        s.buflen = buflen;
        !           115:        result = of1275_server(&s);
        !           116:        *size = s.size;
        !           117:        return result;
        !           118: }
        !           119: 
        !           120: int
        !           121: of1275_nextprop(int phandle, const char *previous, void *buf, int *flag)
        !           122: {
        !           123:        int result;
        !           124:        static of1275_nextprop_service s;
        !           125:        s.service = "nextprop";
        !           126:        s.n_args = 3;
        !           127:        s.n_returns = 1;
        !           128:        s.phandle = phandle;
        !           129:        s.previous = previous;
        !           130:        s.buf = buf;
        !           131:        result = of1275_server(&s);
        !           132:        *flag = s.flag;
        !           133:        return result;
        !           134: }
        !           135: 
        !           136: int
        !           137: of1275_setprop(int phandle, const char *name, void *buf, int len,
        !           138:               int *size)
        !           139: {
        !           140:        int result;
        !           141:        static of1275_setprop_service s;
        !           142:        s.service = "setprop";
        !           143:        s.n_args = 4;
        !           144:        s.n_returns = 1;
        !           145:        s.phandle = phandle;
        !           146:        s.name = name;
        !           147:        s.buf = buf;
        !           148:        s.len = len;
        !           149:        result = of1275_server(&s);
        !           150:        *size = s.size;
        !           151:        return result;
        !           152: }
        !           153: 
        !           154: int
        !           155: of1275_canon(const char *device_specifier, void *buf, int buflen,
        !           156:             int *length)
        !           157: {
        !           158:        int result;
        !           159:        static of1275_canon_service s;
        !           160:        s.service = "canon";
        !           161:        s.n_args = 3;
        !           162:        s.n_returns = 1;
        !           163:        s.device_specifier = device_specifier;
        !           164:        s.buf = buf;
        !           165:        s.buflen = buflen;
        !           166:        result = of1275_server(&s);
        !           167:        *length = s.length;
        !           168:        return result;
        !           169: }
        !           170: 
        !           171: int of1275_finddevice(const char *device_specifier, int *phandle)
        !           172: {
        !           173:        int result;
        !           174:        static of1275_finddevice_service s;
        !           175:        s.service = "finddevice";
        !           176:        s.n_args = 1;
        !           177:        s.n_returns = 1;
        !           178:        s.device_specifier = device_specifier;
        !           179:        result = of1275_server(&s);
        !           180:        *phandle = s.phandle;
        !           181:        return result;
        !           182: }
        !           183: 
        !           184: int
        !           185: of1275_instance_to_path(int ihandle, void *buf, int buflen, int *length)
        !           186: {
        !           187:        int result;
        !           188:        static of1275_instance_to_path_service s;
        !           189:        s.service = "instance-to-path";
        !           190:        s.n_args = 3;
        !           191:        s.n_returns = 1;
        !           192:        s.ihandle = ihandle;
        !           193:        s.buf = buf;
        !           194:        s.buflen = buflen;
        !           195:        result = of1275_server(&s);
        !           196:        *length = s.length;
        !           197:        return result;
        !           198: }
        !           199: 
        !           200: int of1275_package_to_path(int phandle, void *buf, int buflen, int *length)
        !           201: {
        !           202:        int result;
        !           203:        static of1275_package_to_path_service s;
        !           204:        s.service = "package-to-path";
        !           205:        s.n_args = 3;
        !           206:        s.n_returns = 1;
        !           207:        s.phandle = phandle;
        !           208:        s.buf = buf;
        !           209:        s.buflen = buflen;
        !           210:        result = of1275_server(&s);
        !           211:        *length = s.length;
        !           212:        return result;
        !           213: }
        !           214: 
        !           215: /* int of1275_call_method(const char *method, int ihandle, ...); */
        !           216: 
        !           217: 
        !           218: /* 6.3.2.3 Device I/O */
        !           219: 
        !           220: 
        !           221: int of1275_open(const char *device_specifier, int *ihandle)
        !           222: {
        !           223:        int result;
        !           224:        static of1275_open_service s;
        !           225:        s.service = "open";
        !           226:        s.n_args = 1;
        !           227:        s.n_returns = 1;
        !           228:        s.device_specifier = device_specifier;
        !           229:        result = of1275_server(&s);
        !           230:        *ihandle = s.ihandle;
        !           231:        return result;
        !           232: }
        !           233: 
        !           234: int of1275_close(int ihandle)
        !           235: {
        !           236:        int result;
        !           237:        static of1275_close_service s;
        !           238:        s.service = "close";
        !           239:        s.n_args = 1;
        !           240:        s.n_returns = 0;
        !           241:        s.ihandle = ihandle;
        !           242:        result = of1275_server(&s);
        !           243:        return result;
        !           244: }
        !           245: 
        !           246: int of1275_read(int ihandle, void *addr, int len, int *actual)
        !           247: {
        !           248:        int result;
        !           249:        static of1275_read_service s;
        !           250:        s.service = "read";
        !           251:        s.n_args = 3;
        !           252:        s.n_returns = 1;
        !           253:        s.ihandle = ihandle;
        !           254:        s.addr = addr;
        !           255:        s.len = len;
        !           256:        result = of1275_server(&s);
        !           257:        *actual = s.actual;
        !           258:        return result;
        !           259: }
        !           260: 
        !           261: int of1275_write(int ihandle, void *addr, int len, int *actual)
        !           262: {
        !           263:        int result;
        !           264:        static of1275_write_service s;
        !           265:        s.service = "write";
        !           266:        s.n_args = 3;
        !           267:        s.n_returns = 1;
        !           268:        s.ihandle = ihandle;
        !           269:        s.addr = addr;
        !           270:        s.len = len;
        !           271:        result = of1275_server(&s);
        !           272:        *actual = s.actual;
        !           273:        return result;
        !           274: }
        !           275: 
        !           276: int of1275_seek(int ihandle, int pos_hi, int pos_lo, int *status)
        !           277: {
        !           278:        int result;
        !           279:        static of1275_seek_service s;
        !           280:        s.service = "seek";
        !           281:        s.n_args = 3;
        !           282:        s.n_returns = 1;
        !           283:        s.ihandle = ihandle;
        !           284:        s.pos_hi = pos_hi;
        !           285:        s.pos_lo = pos_lo;
        !           286:        result = of1275_server(&s);
        !           287:        *status = s.status;
        !           288:        return result;
        !           289: }
        !           290: 
        !           291: 
        !           292: /* 6.3.2.4 Memory */
        !           293: 
        !           294: 
        !           295: int of1275_claim(void *virt, int size, int align, void **baseaddr)
        !           296: {
        !           297:        int result;
        !           298:        static of1275_claim_service s;
        !           299:        s.service = "claim";
        !           300:        s.n_args = 3;
        !           301:        s.n_returns = 1;
        !           302:        s.virt = virt;
        !           303:        s.size = size;
        !           304:        s.align = align;
        !           305:        result = of1275_server(&s);
        !           306:        *baseaddr = s.baseaddr;
        !           307:        return result;
        !           308: }
        !           309: 
        !           310: int of1275_release(void *virt, int size)
        !           311: {
        !           312:        int result;
        !           313:        static of1275_release_service s;
        !           314:        s.service = "release";
        !           315:        s.n_args = 2;
        !           316:        s.n_returns = 0;
        !           317:        s.virt = virt;
        !           318:        s.size = size;
        !           319:        result = of1275_server(&s);
        !           320:        return result;
        !           321: }
        !           322: 
        !           323: 
        !           324: /* 6.3.2.5 Control transfer */
        !           325: 
        !           326: 
        !           327: int of1275_boot(const char *bootspec)
        !           328: {
        !           329:        int result;
        !           330:        static of1275_boot_service s;
        !           331:        s.service = "boot";
        !           332:        s.n_args = 1;
        !           333:        s.n_returns = 0;
        !           334:        s.bootspec = bootspec;
        !           335:        result = of1275_server(&s);
        !           336:        return result;
        !           337: }
        !           338: 
        !           339: int of1275_enter(void)
        !           340: {
        !           341:        int result;
        !           342:        static of1275_enter_service s;
        !           343:        s.service = "enter";
        !           344:        s.n_args = 0;
        !           345:        s.n_returns = 0;
        !           346:        result = of1275_server(&s);
        !           347:        return result;
        !           348: }
        !           349: 
        !           350: int of1275_exit(int status)
        !           351: {
        !           352:        int result;
        !           353:        static of1275_exit_service s;
        !           354:        s.service = "exit";
        !           355:        s.n_args = 1;
        !           356:        s.n_returns = 0;
        !           357:        s.status = status;
        !           358:        result = of1275_server(&s);
        !           359:        return result;
        !           360: }
        !           361: 
        !           362: /* int of1275_chain(void *virt, int size, void *entry, void *args, int len); */
        !           363: 
        !           364: 
        !           365: /* 6.3.2.6 User interface */
        !           366: 
        !           367: 
        !           368: /* int of1275_interpret(const char *arg, ...); */
        !           369: 
        !           370: int of1275_set_callback(void *newfunc, void **oldfunc)
        !           371: {
        !           372:        int result;
        !           373:        static of1275_set_callback_service s;
        !           374:        s.service = "set-callback";
        !           375:        s.n_args = 1;
        !           376:        s.n_returns = 1;
        !           377:        s.newfunc = newfunc;
        !           378:        result = of1275_server(&s);
        !           379:        *oldfunc = s.oldfunc;
        !           380:        return result;
        !           381: }
        !           382: 
        !           383: int of1275_set_symbol_lookup(void *sym_to_value, void *value_to_sym)
        !           384: {
        !           385:        int result;
        !           386:        static of1275_set_symbol_lookup_service s;
        !           387:        s.service = "set-symbol-lookup";
        !           388:        s.n_args = 2;
        !           389:        s.n_returns = 0;
        !           390:        s.sym_to_value = sym_to_value;
        !           391:        s.value_to_sym = s.value_to_sym;
        !           392:        result = of1275_server(&s);
        !           393:        return result;
        !           394: }
        !           395: 
        !           396: 
        !           397: /* 6.3.2.7 Time */
        !           398: 
        !           399: int of1275_milliseconds(int *ms)
        !           400: {
        !           401:        int result;
        !           402:        static of1275_milliseconds_service s;
        !           403:        s.service = "milliseconds";
        !           404:        s.n_args = 0;
        !           405:        s.n_returns = 1;
        !           406:        result = of1275_server(&s);
        !           407:        *ms = s.ms;
        !           408:        return result;
        !           409: }
        !           410: 
        !           411: 
        !           412: int of_find_integer_property(const char *device, const char *property)
        !           413: {
        !           414:        int phandle;
        !           415:        int integer;
        !           416:        int size;
        !           417:        /* find the device's phandle */
        !           418:        if (of1275_finddevice(device, &phandle) < 0) {
        !           419:                //printk("of1275: no such device '%s'\n", device);
        !           420:                exit(1);
        !           421:        }
        !           422:        /* find the device's property */
        !           423:        of1275_getprop(phandle, property, &integer,
        !           424:                       sizeof(integer), &size);
        !           425:        if (size < sizeof(integer)) {
        !           426:                //printk("of1275: unknown integer property '%s'\n", property);
        !           427:                exit(1);
        !           428:        }
        !           429:        return ntohl(integer);
        !           430: }
        !           431: 
        !           432: void
        !           433: of_find_string_property(const char *device,
        !           434:                        const char *property,
        !           435:                        char *string, int sizeof_string)
        !           436: {
        !           437:        int phandle;
        !           438:        int size;
        !           439:        /* find the device's phandle */
        !           440:        if (of1275_finddevice(device, &phandle) < 0) {
        !           441:                //printk("of1275: no such device '%s'\n", device);
        !           442:                exit(1);
        !           443:        }
        !           444:        
        !           445:        /* find the device's property */
        !           446:        of1275_getprop(phandle, property, string, sizeof_string, &size);
        !           447:        if (size == 0 || size >= sizeof_string) {
        !           448:                //printk("of1275: unknown string property '%s'\n", property);
        !           449:                exit(1);
        !           450:        }
        !           451: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.