Changeset be1b1e68 in mainline
- Timestamp:
- 2017-10-24T10:10:00Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 48adf0f
- Parents:
- cc92076
- Files:
-
- 3 added
- 3 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
boot/arch/sparc64/Makefile.inc
rcc92076 rbe1b1e68 43 43 bus/pci/pciintel \ 44 44 bus/isa \ 45 intctl/obio \ 45 46 char/ns8250 46 47 47 48 RD_DRV_CFG += \ 48 49 bus/isa 49 50 RD_SRVS_NON_ESSENTIAL +=51 52 RD_SRVS_ESSENTIAL += \53 $(USPACE_PATH)/srv/hw/irc/obio/obio54 50 55 51 SOURCES = \ -
uspace/Makefile
rcc92076 rbe1b1e68 135 135 srv/hid/remcons \ 136 136 srv/hw/char/s3c24xx_uart \ 137 srv/hw/irc/obio \138 137 srv/hid/rfb \ 139 138 drv/audio/hdaudio \ … … 170 169 drv/intctl/i8259 \ 171 170 drv/intctl/icp-ic \ 171 drv/intctl/obio \ 172 172 drv/nic/ne2k \ 173 173 drv/nic/e1k \ -
uspace/drv/intctl/obio/Makefile
rcc92076 rbe1b1e68 28 28 # 29 29 30 USPACE_PREFIX = ../../../.. 30 USPACE_PREFIX = ../../.. 31 LIBS = $(LIBDRV_PREFIX)/libdrv.a 32 EXTRA_CFLAGS += -I$(LIBDRV_PREFIX)/include 31 33 BINARY = obio 32 34 33 35 SOURCES = \ 36 main.c \ 34 37 obio.c 35 38 -
uspace/drv/intctl/obio/obio.c
rcc92076 rbe1b1e68 42 42 */ 43 43 44 #include <align.h> 45 #include <as.h> 46 #include <async.h> 47 #include <ddf/driver.h> 48 #include <ddf/log.h> 49 #include <ddi.h> 50 #include <errno.h> 51 #include <inttypes.h> 44 52 #include <ipc/irc.h> 45 #include <loc.h>46 #include <as.h>47 #include <ddi.h>48 #include <align.h>49 #include <inttypes.h>50 53 #include <stdbool.h> 51 #include <errno.h>52 #include <async.h>53 #include <align.h>54 #include <async.h>55 54 #include <stdio.h> 55 56 #include "obio.h" 56 57 57 58 #define NAME "obio" … … 88 89 while (1) { 89 90 int inr; 90 91 91 92 callid = async_get_call(&call); 92 93 switch (IPC_GET_IMETHOD(call)) { … … 112 113 } 113 114 114 /** Initialize the OBIO driver. 115 * 116 * In the future, the OBIO driver should be integrated with the sun4u platform driver. 117 */ 118 static bool obio_init(void) 115 /** Add OBIO device. */ 116 int obio_add(obio_t *obio, obio_res_t *res) 119 117 { 120 category_id_t irc_cat; 121 service_id_t svc_id; 118 ddf_fun_t *fun_a = NULL; 122 119 int rc; 123 120 124 121 base_phys = (uintptr_t) 0x1fe00000000ULL; 125 122 126 123 int flags = AS_AREA_READ | AS_AREA_WRITE; 127 124 int retval = physmem_map(base_phys, 128 125 ALIGN_UP(OBIO_SIZE, PAGE_SIZE) >> PAGE_WIDTH, flags, 129 126 (void *) &base_virt); 130 127 131 128 if (retval < 0) { 132 printf("%s: Error mapping OBIO registers\n", NAME); 133 return false; 129 ddf_msg(LVL_ERROR, "Error mapping OBIO registers"); 130 rc = EIO; 131 goto error; 134 132 } 135 136 printf("%s: OBIO registers with base at 0x%" PRIun "\n", NAME, base_phys); 137 138 async_set_fallback_port_handler(obio_connection, NULL); 139 140 rc = loc_server_register(NAME); 133 134 ddf_msg(LVL_NOTE, "OBIO registers with base at 0x%" PRIun, base_phys); 135 136 fun_a = ddf_fun_create(obio->dev, fun_exposed, "a"); 137 if (fun_a == NULL) { 138 ddf_msg(LVL_ERROR, "Failed creating function 'a'."); 139 rc = ENOMEM; 140 goto error; 141 } 142 143 ddf_fun_set_conn_handler(fun_a, obio_connection); 144 145 rc = ddf_fun_bind(fun_a); 141 146 if (rc != EOK) { 142 printf("%s: Failed registering server. (%d)\n", NAME, rc);143 return false;147 ddf_msg(LVL_ERROR, "Failed binding function 'a'. (%d)", rc); 148 goto error; 144 149 } 145 146 rc = loc_service_register("irc/" NAME, &svc_id); 147 if (rc != EOK) { 148 printf("%s: Failed registering service. (%d)\n", NAME, rc); 149 return false; 150 } 151 152 rc = loc_category_get_id("irc", &irc_cat, IPC_FLAG_BLOCKING); 153 if (rc != EOK) { 154 printf("%s: Failed resolving category 'iplink' (%d).\n", NAME, 155 rc); 156 return false; 157 } 158 159 rc = loc_service_add_to_cat(svc_id, irc_cat); 160 if (rc != EOK) { 161 printf("%s: Failed adding service to category (%d).\n", NAME, 162 rc); 163 return false; 164 } 165 166 return true; 150 151 rc = ddf_fun_add_to_category(fun_a, "irc"); 152 if (rc != EOK) 153 goto error; 154 155 return EOK; 156 error: 157 if (fun_a != NULL) 158 ddf_fun_destroy(fun_a); 159 return rc; 167 160 } 168 161 169 int main(int argc, char **argv) 162 /** Remove OBIO device */ 163 int obio_remove(obio_t *obio) 170 164 { 171 printf("%s: HelenOS OBIO driver\n", NAME); 172 173 if (!obio_init()) 174 return -1; 175 176 printf("%s: Accepting connections\n", NAME); 177 task_retval(0); 178 async_manager(); 179 180 /* Never reached */ 181 return 0; 165 return ENOTSUP; 182 166 } 167 168 /** OBIO device gone */ 169 int obio_gone(obio_t *obio) 170 { 171 return ENOTSUP; 172 } 173 183 174 184 175 /** -
uspace/drv/platform/sun4u/sun4u.c
rcc92076 rbe1b1e68 85 85 .name = NAME, 86 86 .driver_ops = &sun4u_ops 87 }; 88 89 static hw_resource_t obio_res[] = { 90 { 91 .type = MEM_RANGE, 92 .res.mem_range = { 93 .address = PBM_BASE + PBM_PCI_CONFIG_BASE, 94 .size = PBM_PCI_CONFIG_SIZE, 95 .relative = false, 96 .endianness = LITTLE_ENDIAN 97 } 98 } 99 }; 100 101 static sun4u_fun_t obio_data = { 102 .hw_resources = { 103 .count = sizeof(obio_res) / sizeof(obio_res[0]), 104 .resources = obio_res 105 }, 106 .pio_window = { 107 .mem = { 108 .base = PBM_BASE + PBM_PCI_MEM_BASE, 109 .size = PBM_PCI_MEM_SIZE 110 } 111 } 87 112 }; 88 113 … … 201 226 static bool sun4u_add_functions(ddf_dev_t *dev) 202 227 { 228 if (!sun4u_add_fun(dev, "obio", "ebus/obio", &obio_data)) 229 return false; 230 203 231 return sun4u_add_fun(dev, "pci0", "intel_pci", &pci_data); 204 232 }
Note:
See TracChangeset
for help on using the changeset viewer.