diff --git a/include/driver.h b/include/driver.h index faa2fbcdf..1f54e1490 100644 --- a/include/driver.h +++ b/include/driver.h @@ -3,17 +3,13 @@ #define MAX_DRIVER_NAME 16 -#define MAP_READ 1 -#define MAP_WRITE 2 - #define DEVICE_TYPE_UNKNOWN 0 #define DEVICE_TYPE_ETHER 1 -#define DEVICE_TYPE_STDIO 2 +#define DEVICE_TYPE_CONSOLE 2 #define DEVICE_TYPE_DRAM 3 #define DEVICE_TYPE_BLOCK 4 #define DEVICE_TYPE_FS 5 -#define DEVICE_TYPE_CONSOLE 6 -#define MAX_DEVICE_TYPE 6 +#define MAX_DEVICE_TYPE 5 #include @@ -69,26 +65,45 @@ struct driver_d { #define RW_SIZE(x) (x) #define RW_SIZE_MASK 0x7 +/* Register/unregister devices and drivers. Since we don't have modules + * we do not need a driver_unregister function. + */ int register_driver(struct driver_d *); int register_device(struct device_d *); void unregister_device(struct device_d *); -struct device_d *device_from_spec_str(const char *str, char **endp); -struct device_d *get_device_by_name(char *name); +/* Iterate through the devices of a given type. if last is NULL, the + * first device of this type is returned. Put this pointer in as + * 'last' to get the next device. This functions returns NULL if no + * more devices are found. + */ struct device_d *get_device_by_type(ulong type, struct device_d *last); struct device_d *get_device_by_id(const char *id); struct device_d *get_first_device(void); + +/* Find a free device id from the given template. This is archieved by + * appending a number to the template. Dynamically created devices should + * use this function rather than filling the id field themselves. + */ int get_free_deviceid(char *id, char *id_template); +struct device_d *device_from_spec_str(const char *str, char **endp); + +/* Find a driver with the given name. Currently the filesystem implementation + * uses this to get the driver from the name the user specifies with the + * mount command + */ struct driver_d *get_driver_by_name(const char *name); ssize_t dev_read(struct device_d *dev, void *buf, size_t count, ulong offset, ulong flags); ssize_t dev_write(struct device_d *dev, const void *buf, size_t count, ulong offset, ulong flags); ssize_t dev_erase(struct device_d *dev, size_t count, unsigned long offset); +/* These are used by drivers which work with direct memory accesses */ ssize_t mem_read(struct device_d *dev, void *buf, size_t count, ulong offset, ulong flags); ssize_t mem_write(struct device_d *dev, const void *buf, size_t count, ulong offset, ulong flags); +/* Use this if you have nothing to do in your drivers probe function */ int dummy_probe(struct device_d *); #endif /* DRIVER_H */ diff --git a/include/net.h b/include/net.h index aa4071564..416de5a09 100644 --- a/include/net.h +++ b/include/net.h @@ -409,7 +409,7 @@ static inline void NetCopyLong(ulong *to, ulong *from) char * ip_to_string (IPaddr_t x, char *s); /* Convert a string to ip address */ -IPaddr_t string_to_ip(char *s); +IPaddr_t string_to_ip(const char *s); /* Convert a VLAN id to a string */ void VLAN_to_string (ushort x, char *s); @@ -426,8 +426,8 @@ ushort getenv_VLAN(char *); /* copy a filename (allow for "..." notation, limit length) */ void copy_filename (char *dst, char *src, int size); -int string_to_enet_addr(char *str, char *enetaddr); -void enet_addr_to_string(char *enetaddr, char *str); +int string_to_enet_addr(const char *str, char *enetaddr); +void enet_addr_to_string(const char *enetaddr, char *str); /**********************************************************************/ /* Network devices */ diff --git a/include/param.h b/include/param.h index 88e0b1940..f69ced29a 100644 --- a/include/param.h +++ b/include/param.h @@ -14,14 +14,15 @@ struct param_d { char *value; }; -char *dev_get_param(struct device_d *dev, const char *name); +const char *dev_get_param(struct device_d *dev, const char *name); int dev_set_param(struct device_d *dev, const char *name, const char *val); struct param_d *get_param_by_name(struct device_d *dev, const char *name); +int dev_add_param(struct device_d *dev, struct param_d *par); + +/* Convenience functions to handle a parameter as an ip address */ int dev_set_param_ip(struct device_d *dev, char *name, IPaddr_t ip); IPaddr_t dev_get_param_ip(struct device_d *dev, char *name); -int dev_add_parameter(struct device_d *dev, struct param_d *par); - int global_add_parameter(struct param_d *param); #endif /* PARAM_H */ diff --git a/net/eth.c b/net/eth.c index 8451888a8..7f139a2fa 100644 --- a/net/eth.c +++ b/net/eth.c @@ -97,11 +97,11 @@ int eth_register(struct eth_device *edev) edev->param_gateway.name = "gateway"; edev->param_netmask.name = "netmask"; edev->param_serverip.name = "serverip"; - dev_add_parameter(dev, &edev->param_ip); - dev_add_parameter(dev, &edev->param_mac); - dev_add_parameter(dev, &edev->param_gateway); - dev_add_parameter(dev, &edev->param_netmask); - dev_add_parameter(dev, &edev->param_serverip); + dev_add_param(dev, &edev->param_ip); + dev_add_param(dev, &edev->param_mac); + dev_add_param(dev, &edev->param_gateway); + dev_add_param(dev, &edev->param_netmask); + dev_add_param(dev, &edev->param_serverip); if (edev->get_mac_address(edev, ethaddr) == 0) { enet_addr_to_string(ethaddr, ethaddr_str); diff --git a/net/net.c b/net/net.c index ca2b1ef7d..df95da741 100644 --- a/net/net.c +++ b/net/net.c @@ -291,7 +291,8 @@ NetLoop(proto_t protocol) return -1; restart: - string_to_enet_addr(dev_get_param(eth_get_current()->dev, "mac"), NetOurEther); + string_to_enet_addr(dev_get_param(eth_get_current()->dev, "mac"), + NetOurEther); NetState = NETLOOP_CONTINUE; @@ -1513,7 +1514,7 @@ char *ip_to_string (IPaddr_t x, char *s) return s; } -IPaddr_t string_to_ip(char *s) +IPaddr_t string_to_ip(const char *s) { IPaddr_t addr; char *e; @@ -1581,7 +1582,7 @@ ushort getenv_VLAN(char *var) return (string_to_VLAN(getenv(var))); } -int string_to_enet_addr(char *str, char *enetaddr) +int string_to_enet_addr(const char *str, char *enetaddr) { ulong reg; char *e; @@ -1601,7 +1602,7 @@ int string_to_enet_addr(char *str, char *enetaddr) return 0; } -void enet_addr_to_string(char *enetaddr, char *str) +void enet_addr_to_string(const char *enetaddr, char *str) { sprintf (str, "%02X:%02X:%02X:%02X:%02X:%02X", enetaddr[0], enetaddr[1], enetaddr[2], enetaddr[3],