Annotation of qemu/roms/SLOF/clients/net-snk/oflib/ci_device.c, revision 1.1

1.1     ! root        1: /******************************************************************************
        !             2:  * Copyright (c) 2011 IBM Corporation
        !             3:  * All rights reserved.
        !             4:  * This program and the accompanying materials
        !             5:  * are made available under the terms of the BSD License
        !             6:  * which accompanies this distribution, and is available at
        !             7:  * http://www.opensource.org/licenses/bsd-license.php
        !             8:  *
        !             9:  * Contributors:
        !            10:  *     IBM Corporation - initial implementation
        !            11:  *****************************************************************************/
        !            12: /*
        !            13:  * A pseudo-module that uses the the "write" and "read" functions via the
        !            14:  * client interface to handle the given device.
        !            15:  * Normally the net-snk uses the various net_xxx modules from the romfs to
        !            16:  * drive the network cards. However, in case we do not have a net-snk driver
        !            17:  * for the given card and it has been initialized via FCODE instead, we've
        !            18:  * got to use the Open Firmware Client Interface "write" and "read" functions
        !            19:  * to talk to the NIC. This is achieved via this pseudo-module here.
        !            20:  */
        !            21: 
        !            22: #include <of.h>
        !            23: #include <string.h>
        !            24: #include <netdriver_int.h>
        !            25: #include <fileio.h>
        !            26: #include <stdint.h>
        !            27: #include <kernel.h>
        !            28: 
        !            29: #define DEBUG 0
        !            30: #if DEBUG
        !            31: #define        dprintf(str, ...)  snk_kernel_interface.print(str, ## __VA_ARGS__)
        !            32: #else
        !            33: #define        dprintf(str, ...) do{}while(0)
        !            34: #endif
        !            35: 
        !            36: extern snk_kernel_t snk_kernel_interface;
        !            37: 
        !            38: snk_module_t * cimod_check_and_install(void);
        !            39: static int cimod_init(void);
        !            40: static int cimod_term(void);
        !            41: static int cimod_read(char *buffer, int len);
        !            42: static int cimod_write(char *buffer, int len);
        !            43: static int cimod_ioctl(int request, void *data);
        !            44: 
        !            45: snk_module_t ci_module = {
        !            46:        .version = 1,
        !            47:        .type    = MOD_TYPE_NETWORK,
        !            48:        .running = 0,
        !            49:        .link_addr = (char*) 1,
        !            50:        .init    = cimod_init,
        !            51:        .term    = cimod_term,
        !            52:        .write   = cimod_write,
        !            53:        .read    = cimod_read,
        !            54:        .ioctl   = cimod_ioctl
        !            55: };
        !            56: 
        !            57: static ihandle_t myself;
        !            58: 
        !            59: 
        !            60: snk_module_t *
        !            61: cimod_check_and_install(void)
        !            62: {
        !            63:        uint8_t tmpbuf[8];
        !            64: 
        !            65:        dprintf("entered cimod_check_and_install!\n");
        !            66: 
        !            67:        myself = of_interpret_1("my-parent", tmpbuf);
        !            68:        dprintf("cimod: myself=%lx\n", myself);
        !            69: 
        !            70:        /* Check whether "read" and "write" functions are provided by the
        !            71:         * device tree node: */
        !            72:        if (of_read(myself, tmpbuf, 0) == -1
        !            73:            || of_write(myself, tmpbuf, 0) == -1) {
        !            74:                dprintf("cimod: missing read or write!\n");
        !            75:                return NULL;
        !            76:        }
        !            77: 
        !            78:        return &ci_module;
        !            79: }
        !            80: 
        !            81: static int
        !            82: cimod_init(void)
        !            83: {
        !            84:        ci_module.running = 1;
        !            85:        snk_kernel_interface.print("client-interface module initialized!\n");
        !            86:        return 0;
        !            87: }
        !            88: 
        !            89: static int
        !            90: cimod_term(void)
        !            91: {
        !            92:        ci_module.running = 0;
        !            93:        dprintf("cimod term called!\n");
        !            94:        return 0;
        !            95: }
        !            96: 
        !            97: static int
        !            98: cimod_read(char *buffer, int len)
        !            99: {
        !           100:        int ret;
        !           101: 
        !           102:        ret = of_read(myself, buffer, len);
        !           103:        dprintf("cimod read returned: %i!\n", ret);
        !           104: 
        !           105:        return ret;
        !           106: }
        !           107: 
        !           108: static int
        !           109: cimod_write(char *buffer, int len)
        !           110: {
        !           111:        int ret;
        !           112: 
        !           113:        ret = of_write(myself, buffer, len);
        !           114:        dprintf("cimod write returned: %i!\n", ret);
        !           115: 
        !           116:        return ret;
        !           117: }
        !           118: 
        !           119: static int
        !           120: cimod_ioctl(int request, void *data)
        !           121: {
        !           122:        dprintf("cimod ioctl called!\n");
        !           123: 
        !           124:        return 0;
        !           125: }

unix.superglobalmegacorp.com

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