Changeset babe786 in mainline
- Timestamp:
- 2006-05-15T11:51:28Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 043dcc27
- Parents:
- 52352ec
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
libadt/include/hash_table.h
r52352ec rbabe786 30 30 #define __HASH_TABLE_H__ 31 31 32 #include <li st.h>32 #include <libadt/list.h> 33 33 #include <unistd.h> 34 34 -
ns/Makefile
r52352ec rbabe786 31 31 32 32 LIBC_PREFIX = ../libc 33 LIBADT_PREFIX = ../libadt 33 34 LIBIPC_PREFIX = ../libipc 34 35 SOFTINT_PREFIX = ../softint … … 37 38 CFLAGS += -I../libipc/include 38 39 39 LIBS = $(LIB IPC_PREFIX)/libipc.a $(LIBC_PREFIX)/libc.a40 LIBS = $(LIBADT_PREFIX)/libadt.a $(LIBIPC_PREFIX)/libipc.a $(LIBC_PREFIX)/libc.a 40 41 41 42 ## Sources -
ns/ns.c
r52352ec rbabe786 1 /* 2 * Copyright (C) 2006 Ondrej Palkovsky 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * - Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * - Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * - The name of the author may not be used to endorse or promote products 15 * derived from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 /** 30 * @file ns.c 31 * @brief Naming service for HelenOS IPC. 32 */ 33 1 34 #include <ipc.h> 2 35 #include <stdio.h> … … 5 38 #include <ns.h> 6 39 #include <errno.h> 40 #include <assert.h> 41 #include <libadt/list.h> 42 #include <libadt/hash_table.h> 43 44 #define NAME "NS" 45 46 #define NS_HASH_TABLE_CHAINS 20 47 48 /* Static functions implementing NS hash table operations. */ 49 static hash_index_t ns_hash(unsigned long *key); 50 static int ns_compare(unsigned long *key, hash_count_t keys, link_t *item); 51 52 /** Operations for NS hash table. */ 53 static hash_table_operations_t ns_hash_table_ops = { 54 .hash = ns_hash, 55 .compare = ns_compare, 56 .remove_callback = NULL 57 }; 58 59 /** NS hash table structure. */ 60 static hash_table_t ns_hash_table; 61 62 /** NS hash table item. */ 63 typedef struct { 64 link_t link; 65 ipcarg_t service; /**< Number of the service. */ 66 ipcarg_t phone; /**< Phone registered with the service. */ 67 } hashed_service_t; 68 7 69 /* 8 70 irq_cmd_t msim_cmds[1] = { … … 26 88 */ 27 89 28 static int service; 90 91 int static ping_phone; 29 92 30 93 int main(int argc, char **argv) … … 36 99 ipcarg_t retval, arg1, arg2; 37 100 38 printf("NS:Name service started.\n"); 101 printf("%s: Name service started.\n", NAME); 102 103 if (!hash_table_create(&ns_hash_table, NS_HASH_TABLE_CHAINS, 1, &ns_hash_table_ops)) { 104 printf("%s: cannot create hash table\n", NAME); 105 return ENOMEM; 106 } 107 108 39 109 // ipc_register_irq(2, &msim_kbd); 40 110 // ipc_register_irq(1, &i8042_kbd); 41 111 while (1) { 42 112 callid = ipc_wait_for_call(&call, 0); 43 printf("NS: Call phone=%lX..", call.phoneid);113 printf("NS: Call phone=%lX...", call.phoneid); 44 114 switch (IPC_GET_METHOD(call)) { 45 115 case IPC_M_AS_SEND: … … 61 131 retval = 0; 62 132 break; 63 case IPC_M_CONNECT_TO_ME: 64 printf("Somebody connecting phid=%zd.\n", IPC_GET_ARG3(call)); 65 service = IPC_GET_ARG3(call); 133 case IPC_M_CONNECT_TO_ME:; 134 /* 135 * Request for registration of a service. 136 */ 137 ipcarg_t service; 138 ipcarg_t phone; 139 hashed_service_t *hs; 140 141 service = IPC_GET_ARG1(call); 142 phone = IPC_GET_ARG3(call); 143 printf("Registering service %d on phone %d...", service, phone); 144 145 hs = (hashed_service_t *) malloc(sizeof(hashed_service_t)); 146 if (!hs) { 147 printf("Failed to register service %d.\n", service); 148 } 149 150 link_initialize(&hs->link); 151 hs->service = service; 152 hs->phone = phone; 153 hash_table_insert(&ns_hash_table, (unsigned long *) &service, &hs->link); 154 155 ping_phone = phone; 66 156 retval = 0; 67 157 break; … … 83 173 break; 84 174 case NS_PING_SVC: 85 printf("NS:Pinging service %d\n", service);86 ipc_call_sync( service, NS_PING, 0xbeef, 0);175 printf("NS:Pinging service %d\n", ping_phone); 176 ipc_call_sync(ping_phone, NS_PING, 0xbeef, 0); 87 177 printf("NS:Got pong\n"); 88 178 break; … … 93 183 } 94 184 if (! (callid & IPC_CALLID_NOTIFICATION)) { 95 printf("Answerin h\n");185 printf("Answering.\n"); 96 186 ipc_answer(callid, retval, arg1, arg2); 97 187 } 98 188 } 99 189 } 190 191 /** Compute hash index into NS hash table. 192 * 193 * @param key Pointer to single key (i.e. service number). 194 * @return Hash index corresponding to *key. 195 */ 196 hash_index_t ns_hash(unsigned long *key) 197 { 198 assert(key); 199 return *key % NS_HASH_TABLE_CHAINS; 200 } 201 202 /** Compare a key with hashed item. 203 * 204 * @param key Single key pointer. 205 * @param keys Must be 1. 206 * @param item Pointer to a hash table item. 207 * @return Non-zero if the key matches the item, zero otherwise. 208 */ 209 int ns_compare(unsigned long *key, hash_count_t keys, link_t *item) 210 { 211 hashed_service_t *hs; 212 213 assert(key); 214 assert(keys == 1); 215 assert(item); 216 217 hs = hash_table_get_instance(item, hashed_service_t, link); 218 219 return *key == hs->service; 220 } -
pci/Makefile
r52352ec rbabe786 37 37 CFLAGS += -I../libipc/include 38 38 39 LIBS = libpci/libpci.a $(LIB C_PREFIX)/libc.a39 LIBS = libpci/libpci.a $(LIBIPC_PREFIX)/libipc.a $(LIBC_PREFIX)/libc.a 40 40 41 41 ## Sources -
pci/pci.c
r52352ec rbabe786 14 14 #include <task.h> 15 15 #include <stdlib.h> 16 #include <ipc.h> 17 #include <errno.h> 16 18 17 19 #include "libpci/pci.h" … … 19 21 #define PCI_CONF1 0xcf8 20 22 #define PCI_CONF1_SIZE 8 23 24 #define NAME "PCI" 21 25 22 26 int main(int argc, char *argv[]) … … 27 31 char buf[80]; 28 32 29 printf("HelenOS PCI driver\n"); 33 int ipc_res; 34 ipcarg_t ns_phone_addr; 35 36 printf("%s: HelenOS PCI driver\n", NAME); 30 37 31 38 /* … … 48 55 pci_cleanup(pacc); /* Close everything */ 49 56 57 printf("%s: registering at naming service.\n", NAME); 58 if (ipc_connect_to_me(PHONE_NS, 40, 70, &ns_phone_addr) != 0) { 59 printf("Failed to register %s at naming service.\n", NAME); 60 return -1; 61 } 62 63 printf("%s: accepting connections\n", NAME); 64 while (1) { 65 ipc_call_t call; 66 ipc_callid_t callid; 67 68 callid = ipc_wait_for_call(&call, 0); 69 ipc_answer(callid, EHANGUP, 0, 0); 70 } 50 71 return 0; 51 72 }
Note:
See TracChangeset
for help on using the changeset viewer.