Annotation of qemu/hw/lm32_juart.c, revision 1.1.1.3

1.1       root        1: /*
                      2:  *  LatticeMico32 JTAG UART model.
                      3:  *
                      4:  *  Copyright (c) 2010 Michael Walle <[email protected]>
                      5:  *
                      6:  * This library is free software; you can redistribute it and/or
                      7:  * modify it under the terms of the GNU Lesser General Public
                      8:  * License as published by the Free Software Foundation; either
                      9:  * version 2 of the License, or (at your option) any later version.
                     10:  *
                     11:  * This library is distributed in the hope that it will be useful,
                     12:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
                     13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     14:  * Lesser General Public License for more details.
                     15:  *
                     16:  * You should have received a copy of the GNU Lesser General Public
                     17:  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
                     18:  */
                     19: 
                     20: #include "hw.h"
                     21: #include "sysbus.h"
                     22: #include "trace.h"
                     23: #include "qemu-char.h"
                     24: 
                     25: #include "lm32_juart.h"
                     26: 
                     27: enum {
                     28:     LM32_JUART_MIN_SAVE_VERSION = 0,
                     29:     LM32_JUART_CURRENT_SAVE_VERSION = 0,
                     30:     LM32_JUART_MAX_SAVE_VERSION = 0,
                     31: };
                     32: 
                     33: enum {
                     34:     JTX_FULL = (1<<8),
                     35: };
                     36: 
                     37: enum {
                     38:     JRX_FULL = (1<<8),
                     39: };
                     40: 
                     41: struct LM32JuartState {
                     42:     SysBusDevice busdev;
                     43:     CharDriverState *chr;
                     44: 
                     45:     uint32_t jtx;
                     46:     uint32_t jrx;
                     47: };
                     48: typedef struct LM32JuartState LM32JuartState;
                     49: 
                     50: uint32_t lm32_juart_get_jtx(DeviceState *d)
                     51: {
                     52:     LM32JuartState *s = container_of(d, LM32JuartState, busdev.qdev);
                     53: 
                     54:     trace_lm32_juart_get_jtx(s->jtx);
                     55:     return s->jtx;
                     56: }
                     57: 
                     58: uint32_t lm32_juart_get_jrx(DeviceState *d)
                     59: {
                     60:     LM32JuartState *s = container_of(d, LM32JuartState, busdev.qdev);
                     61: 
                     62:     trace_lm32_juart_get_jrx(s->jrx);
                     63:     return s->jrx;
                     64: }
                     65: 
                     66: void lm32_juart_set_jtx(DeviceState *d, uint32_t jtx)
                     67: {
                     68:     LM32JuartState *s = container_of(d, LM32JuartState, busdev.qdev);
                     69:     unsigned char ch = jtx & 0xff;
                     70: 
                     71:     trace_lm32_juart_set_jtx(s->jtx);
                     72: 
                     73:     s->jtx = jtx;
                     74:     if (s->chr) {
1.1.1.2   root       75:         qemu_chr_fe_write(s->chr, &ch, 1);
1.1       root       76:     }
                     77: }
                     78: 
                     79: void lm32_juart_set_jrx(DeviceState *d, uint32_t jtx)
                     80: {
                     81:     LM32JuartState *s = container_of(d, LM32JuartState, busdev.qdev);
                     82: 
                     83:     trace_lm32_juart_set_jrx(s->jrx);
                     84:     s->jrx &= ~JRX_FULL;
                     85: }
                     86: 
                     87: static void juart_rx(void *opaque, const uint8_t *buf, int size)
                     88: {
                     89:     LM32JuartState *s = opaque;
                     90: 
                     91:     s->jrx = *buf | JRX_FULL;
                     92: }
                     93: 
                     94: static int juart_can_rx(void *opaque)
                     95: {
                     96:     LM32JuartState *s = opaque;
                     97: 
                     98:     return !(s->jrx & JRX_FULL);
                     99: }
                    100: 
                    101: static void juart_event(void *opaque, int event)
                    102: {
                    103: }
                    104: 
                    105: static void juart_reset(DeviceState *d)
                    106: {
                    107:     LM32JuartState *s = container_of(d, LM32JuartState, busdev.qdev);
                    108: 
                    109:     s->jtx = 0;
                    110:     s->jrx = 0;
                    111: }
                    112: 
                    113: static int lm32_juart_init(SysBusDevice *dev)
                    114: {
                    115:     LM32JuartState *s = FROM_SYSBUS(typeof(*s), dev);
                    116: 
1.1.1.3 ! root      117:     s->chr = qemu_char_get_next_serial();
1.1       root      118:     if (s->chr) {
                    119:         qemu_chr_add_handlers(s->chr, juart_can_rx, juart_rx, juart_event, s);
                    120:     }
                    121: 
                    122:     return 0;
                    123: }
                    124: 
                    125: static const VMStateDescription vmstate_lm32_juart = {
                    126:     .name = "lm32-juart",
                    127:     .version_id = 1,
                    128:     .minimum_version_id = 1,
                    129:     .minimum_version_id_old = 1,
                    130:     .fields      = (VMStateField[]) {
                    131:         VMSTATE_UINT32(jtx, LM32JuartState),
                    132:         VMSTATE_UINT32(jrx, LM32JuartState),
                    133:         VMSTATE_END_OF_LIST()
                    134:     }
                    135: };
                    136: 
1.1.1.3 ! root      137: static void lm32_juart_class_init(ObjectClass *klass, void *data)
        !           138: {
        !           139:     DeviceClass *dc = DEVICE_CLASS(klass);
        !           140:     SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
        !           141: 
        !           142:     k->init = lm32_juart_init;
        !           143:     dc->reset = juart_reset;
        !           144:     dc->vmsd = &vmstate_lm32_juart;
        !           145: }
        !           146: 
        !           147: static TypeInfo lm32_juart_info = {
        !           148:     .name          = "lm32-juart",
        !           149:     .parent        = TYPE_SYS_BUS_DEVICE,
        !           150:     .instance_size = sizeof(LM32JuartState),
        !           151:     .class_init    = lm32_juart_class_init,
1.1       root      152: };
                    153: 
1.1.1.3 ! root      154: static void lm32_juart_register_types(void)
1.1       root      155: {
1.1.1.3 ! root      156:     type_register_static(&lm32_juart_info);
1.1       root      157: }
                    158: 
1.1.1.3 ! root      159: type_init(lm32_juart_register_types)

unix.superglobalmegacorp.com

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