[PATCH 2/5] iicbus: port to RTEMS
Christian Mauderer
list at c-mauderer.de
Wed Jun 5 18:43:54 UTC 2019
On 01/06/2019 21:20, Vijay Kumar Banerjee wrote:
> ---
> Makefile.todo | 11 ++
> buildset/default.ini | 1 +
> libbsd.py | 35 ++++
> rtemsbsd/include/bsp/nexus-devices.h | 4 +
> .../machine/rtems-bsd-kernel-namespace.h | 33 ++++
> rtemsbsd/include/rtems/bsd/local/iicbus_if.h | 166 ++++++++++++++++++
> rtemsbsd/local/iicbus_if.c | 76 ++++++++
> 7 files changed, 326 insertions(+)
> create mode 100644 rtemsbsd/include/rtems/bsd/local/iicbus_if.h
> create mode 100644 rtemsbsd/local/iicbus_if.c
>
> diff --git a/Makefile.todo b/Makefile.todo
> index 9754ddb6..74188531 100644
> --- a/Makefile.todo
> +++ b/Makefile.todo
> @@ -215,6 +215,17 @@ $(LOCAL_SRC)/gpiobus_if.c: $(FREEBSD_SRC)/sys/dev/gpio/gpiobus_if.m
> -e 's|#include "gpiobus_if.h"|#include <rtems/bsd/local/gpiobus_if.h>|'
> mv gpiobus_if.c $@
>
> +$(LOCAL_INC)/iicbus_if.h: $(FREEBSD_SRC)/sys/dev/iicbus/iicbus_if.m
> + awk -f $(TOOLS)/makeobjops.awk $< -h
> + mv iicbus_if.h $@
> +
> +$(LOCAL_SRC)/iicbus_if.c: $(FREEBSD_SRC)/sys/dev/iicbus/iicbus_if.m
> + awk -f $(TOOLS)/makeobjops.awk $< -c
> + sed -i iicbus_if.c \
> + -e '1 i\#include <machine/rtems-bsd-kernel-space.h>\n' \
> + -e 's|#include "iicbus_if.h"|#include <rtems/bsd/local/iicbus_if.h>|'
> + mv iicbus_if.c $@
> +
> $(LOCAL_INC)/sdhci_if.h: $(FREEBSD_SRC)/sys/dev/sdhci/sdhci_if.m
> awk -f $(TOOLS)/makeobjops.awk $< -h
> mv sdhci_if.h $@
> diff --git a/buildset/default.ini b/buildset/default.ini
> index f25fe9a3..4acb2368 100644
> --- a/buildset/default.ini
> +++ b/buildset/default.ini
> @@ -36,6 +36,7 @@ dev_usb_serial = on
> dev_usb_storage = on
> dev_usb_wlan = off
> dev_wlan_rtwn = off
> +iic = on
> dhcpcd = on
> dpaa = on
> evdev = on
> diff --git a/libbsd.py b/libbsd.py
> index d99e3ad8..a25d3a8a 100644
> --- a/libbsd.py
> +++ b/libbsd.py
> @@ -125,6 +125,7 @@ _defaults = {
> ('freebsd/sys/sys', '**/*.h', 'sys'),
> ('freebsd/sys/vm', '**/*.h', 'vm'),
> ('freebsd/sys/dev/mii', '**/*.h', 'dev/mii'),
> + ('freebsd/sys/dev/iicbus', '**/*.h', 'dev/iicbus'),
> ('linux/include', '**/*.h', ''),
> ('mDNSResponder/mDNSCore', 'mDNSDebug.h', ''),
> ('mDNSResponder/mDNSCore', 'mDNSEmbeddedAPI.h', ''),
> @@ -741,6 +742,39 @@ class evdev(builder.Module):
> mm.generator['source']()
> )
>
> +#
> +# IIC
> +#
> +class iic(builder.Module):
> +
> + def __init__(self, manager):
> + super(iic, self).__init__(manager, type(self).__name__)
> +
> + def generate(self):
> + mm = self.manager
> + self.addKernelSpaceHeaderFiles(
> + [
> + 'sys/dev/iicbus/iicbus.h',
> + 'sys/dev/iicbus/iic.h',
> + 'sys/dev/iicbus/iiconf.h',
> + ]
> + )
> + self.addKernelSpaceSourceFiles(
> + [
> + 'sys/dev/iicbus/iic.c',
> + 'sys/dev/iicbus/iicbus.c',
> + 'sys/dev/iicbus/iiconf.c',
> + 'sys/dev/iicbus/ofw_iicbus.c',
> + ],
> + mm.generator['source']()
> + )
> + self.addRTEMSSourceFiles(
> + [
> + 'local/iicbus_if.c',
> + ],
> + mm.generator['source']()
> + )
> +
> #
> # USB
> #
> @@ -5096,6 +5130,7 @@ def load(mm):
> mm.addModule(mmc_ti(mm))
> mm.addModule(dev_input(mm))
> mm.addModule(evdev(mm))
> + mm.addModule(iic(mm))
>
> mm.addModule(dev_usb(mm))
> mm.addModule(dev_usb_controller(mm))
> diff --git a/rtemsbsd/include/bsp/nexus-devices.h b/rtemsbsd/include/bsp/nexus-devices.h
> index a916c664..97f6d2b2 100644
> --- a/rtemsbsd/include/bsp/nexus-devices.h
> +++ b/rtemsbsd/include/bsp/nexus-devices.h
> @@ -61,6 +61,10 @@ SYSINIT_DRIVER_REFERENCE(sdhci_ti, simplebus);
> SYSINIT_DRIVER_REFERENCE(mmcsd, mmc);
> SYSINIT_DRIVER_REFERENCE(cpsw, cpswss);
> SYSINIT_DRIVER_REFERENCE(ukphy, miibus);
> +SYSINIT_DRIVER_REFERENCE(rtems_i2c, simplebus);
> +SYSINIT_DRIVER_REFERENCE(ofw_iicbus, rtems_i2c);
> +SYSINIT_DRIVER_REFERENCE(iic, iicbus);
> +SYSINIT_DRIVER_REFERENCE(iicbus, rtems_i2c);
> #ifdef RTEMS_BSD_MODULE_NET80211
> SYSINIT_DRIVER_REFERENCE(rtwn_usb, uhub);
> SYSINIT_MODULE_REFERENCE(wlan_ratectl_none);
> diff --git a/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h b/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h
> index d7967c65..626c2ccc 100644
> --- a/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h
> +++ b/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h
> @@ -1304,6 +1304,8 @@
> #define gif_hashinit _bsd_gif_hashinit
> #define gif_input _bsd_gif_input
> #define gif_output _bsd_gif_output
> +#define global_epoch _bsd_global_epoch
> +#define global_epoch_preempt _bsd_global_epoch_preempt
I'm really not sure why these have been added during the iicbus patches.
I'll have to have a look at that before I can give a go to these. Note
that this isn't your fault but most likely either a missed one in an
earlier patch or a bug in the scripts.
> #define gpio_alloc_intr_resource _bsd_gpio_alloc_intr_resource
> #define gpiobus_acquire_pin _bsd_gpiobus_acquire_pin
> #define gpiobus_alloc_ivars _bsd_gpiobus_alloc_ivars
> @@ -1988,6 +1990,33 @@
> #define igmp_input _bsd_igmp_input
> #define igmp_mtx _bsd_igmp_mtx
> #define igmp_slowtimo _bsd_igmp_slowtimo
> +#define iic2errno _bsd_iic2errno
> +#define iicbb_devclass _bsd_iicbb_devclass
> +#define iicbb_driver _bsd_iicbb_driver
> +#define iicbus_block_read _bsd_iicbus_block_read
> +#define iicbus_block_write _bsd_iicbus_block_write
> +#define iicbus_devclass _bsd_iicbus_devclass
> +#define iicbus_driver _bsd_iicbus_driver
> +#define iicbus_generic_intr _bsd_iicbus_generic_intr
> +#define iicbus_init_frequency _bsd_iicbus_init_frequency
> +#define iicbus_intr _bsd_iicbus_intr
> +#define iicbus_null_callback _bsd_iicbus_null_callback
> +#define iicbus_null_repeated_start _bsd_iicbus_null_repeated_start
> +#define iicbus_read _bsd_iicbus_read
> +#define iicbus_read_byte _bsd_iicbus_read_byte
> +#define iicbus_release_bus _bsd_iicbus_release_bus
> +#define iicbus_repeated_start _bsd_iicbus_repeated_start
> +#define iicbus_request_bus _bsd_iicbus_request_bus
> +#define iicbus_start _bsd_iicbus_start
> +#define iicbus_started _bsd_iicbus_started
> +#define iicbus_stop _bsd_iicbus_stop
> +#define iicbus_transfer _bsd_iicbus_transfer
> +#define iicbus_transfer_excl _bsd_iicbus_transfer_excl
> +#define iicbus_transfer_gen _bsd_iicbus_transfer_gen
> +#define iicbus_write _bsd_iicbus_write
> +#define iicbus_write_byte _bsd_iicbus_write_byte
> +#define iicdev_readfrom _bsd_iicdev_readfrom
> +#define iicdev_writeto _bsd_iicdev_writeto
> #define im6o_mc_filter _bsd_im6o_mc_filter
> #define imo_multi_filter _bsd_imo_multi_filter
> #define in4_cksum _bsd_in4_cksum
> @@ -2914,6 +2943,8 @@
> #define nd6_timer_ch _bsd_nd6_timer_ch
> #define nd_defrouter _bsd_nd_defrouter
> #define nd_prefix _bsd_nd_prefix
> +#define net_epoch _bsd_net_epoch
> +#define net_epoch_preempt _bsd_net_epoch_preempt
Same here: Not sure why they haven't been already added earlier.
> #define netisr_clearqdrops _bsd_netisr_clearqdrops
> #define netisr_dispatch _bsd_netisr_dispatch
> #define netisr_dispatch_src _bsd_netisr_dispatch_src
> @@ -3020,6 +3051,8 @@
> #define ofw_gpiobus_parse_gpios _bsd_ofw_gpiobus_parse_gpios
> #define ofw_gpiobus_register_provider _bsd_ofw_gpiobus_register_provider
> #define ofw_gpiobus_unregister_provider _bsd_ofw_gpiobus_unregister_provider
> +#define ofw_iicbus_devclass _bsd_ofw_iicbus_devclass
> +#define ofw_iicbus_driver _bsd_ofw_iicbus_driver
> #define ofw_parse_bootargs _bsd_ofw_parse_bootargs
> #define ofw_reg_to_paddr _bsd_ofw_reg_to_paddr
> #define OF_write _bsd_OF_write
> diff --git a/rtemsbsd/include/rtems/bsd/local/iicbus_if.h b/rtemsbsd/include/rtems/bsd/local/iicbus_if.h
> new file mode 100644
> index 00000000..7fafbb60
> --- /dev/null
> +++ b/rtemsbsd/include/rtems/bsd/local/iicbus_if.h
> @@ -0,0 +1,166 @@
> +/*
> + * This file is produced automatically.
> + * Do not modify anything in here by hand.
> + *
> + * Created from source file
> + * freebsd-org/sys/dev/iicbus/iicbus_if.m
> + * with
> + * makeobjops.awk
> + *
> + * See the source file for legal information
> + */
> +
> +
> +#ifndef _iicbus_if_h_
> +#define _iicbus_if_h_
> +
> +/** @brief Unique descriptor for the IICBUS_INTR() method */
> +extern struct kobjop_desc iicbus_intr_desc;
> +/** @brief A function implementing the IICBUS_INTR() method */
> +typedef int iicbus_intr_t(device_t dev, int event, char *buf);
> +
> +static __inline int IICBUS_INTR(device_t dev, int event, char *buf)
> +{
> + kobjop_t _m;
> + int rc;
> + KOBJOPLOOKUP(((kobj_t)dev)->ops,iicbus_intr);
> + rc = ((iicbus_intr_t *) _m)(dev, event, buf);
> + return (rc);
> +}
> +
> +/** @brief Unique descriptor for the IICBUS_CALLBACK() method */
> +extern struct kobjop_desc iicbus_callback_desc;
> +/** @brief A function implementing the IICBUS_CALLBACK() method */
> +typedef int iicbus_callback_t(device_t dev, int index, caddr_t data);
> +
> +static __inline int IICBUS_CALLBACK(device_t dev, int index, caddr_t data)
> +{
> + kobjop_t _m;
> + int rc;
> + KOBJOPLOOKUP(((kobj_t)dev)->ops,iicbus_callback);
> + rc = ((iicbus_callback_t *) _m)(dev, index, data);
> + return (rc);
> +}
> +
> +/** @brief Unique descriptor for the IICBUS_REPEATED_START() method */
> +extern struct kobjop_desc iicbus_repeated_start_desc;
> +/** @brief A function implementing the IICBUS_REPEATED_START() method */
> +typedef int iicbus_repeated_start_t(device_t dev, u_char slave, int timeout);
> +
> +static __inline int IICBUS_REPEATED_START(device_t dev, u_char slave,
> + int timeout)
> +{
> + kobjop_t _m;
> + int rc;
> + KOBJOPLOOKUP(((kobj_t)dev)->ops,iicbus_repeated_start);
> + rc = ((iicbus_repeated_start_t *) _m)(dev, slave, timeout);
> + return (rc);
> +}
> +
> +/** @brief Unique descriptor for the IICBUS_START() method */
> +extern struct kobjop_desc iicbus_start_desc;
> +/** @brief A function implementing the IICBUS_START() method */
> +typedef int iicbus_start_t(device_t dev, u_char slave, int timeout);
> +
> +static __inline int IICBUS_START(device_t dev, u_char slave, int timeout)
> +{
> + kobjop_t _m;
> + int rc;
> + KOBJOPLOOKUP(((kobj_t)dev)->ops,iicbus_start);
> + rc = ((iicbus_start_t *) _m)(dev, slave, timeout);
> + return (rc);
> +}
> +
> +/** @brief Unique descriptor for the IICBUS_STOP() method */
> +extern struct kobjop_desc iicbus_stop_desc;
> +/** @brief A function implementing the IICBUS_STOP() method */
> +typedef int iicbus_stop_t(device_t dev);
> +
> +static __inline int IICBUS_STOP(device_t dev)
> +{
> + kobjop_t _m;
> + int rc;
> + KOBJOPLOOKUP(((kobj_t)dev)->ops,iicbus_stop);
> + rc = ((iicbus_stop_t *) _m)(dev);
> + return (rc);
> +}
> +
> +/** @brief Unique descriptor for the IICBUS_READ() method */
> +extern struct kobjop_desc iicbus_read_desc;
> +/** @brief A function implementing the IICBUS_READ() method */
> +typedef int iicbus_read_t(device_t dev, char *buf, int len, int *bytes,
> + int last, int delay);
> +
> +static __inline int IICBUS_READ(device_t dev, char *buf, int len, int *bytes,
> + int last, int delay)
> +{
> + kobjop_t _m;
> + int rc;
> + KOBJOPLOOKUP(((kobj_t)dev)->ops,iicbus_read);
> + rc = ((iicbus_read_t *) _m)(dev, buf, len, bytes, last, delay);
> + return (rc);
> +}
> +
> +/** @brief Unique descriptor for the IICBUS_WRITE() method */
> +extern struct kobjop_desc iicbus_write_desc;
> +/** @brief A function implementing the IICBUS_WRITE() method */
> +typedef int iicbus_write_t(device_t dev, const char *buf, int len, int *bytes,
> + int timeout);
> +
> +static __inline int IICBUS_WRITE(device_t dev, const char *buf, int len,
> + int *bytes, int timeout)
> +{
> + kobjop_t _m;
> + int rc;
> + KOBJOPLOOKUP(((kobj_t)dev)->ops,iicbus_write);
> + rc = ((iicbus_write_t *) _m)(dev, buf, len, bytes, timeout);
> + return (rc);
> +}
> +
> +/** @brief Unique descriptor for the IICBUS_RESET() method */
> +extern struct kobjop_desc iicbus_reset_desc;
> +/** @brief A function implementing the IICBUS_RESET() method */
> +typedef int iicbus_reset_t(device_t dev, u_char speed, u_char addr,
> + u_char *oldaddr);
> +
> +static __inline int IICBUS_RESET(device_t dev, u_char speed, u_char addr,
> + u_char *oldaddr)
> +{
> + kobjop_t _m;
> + int rc;
> + KOBJOPLOOKUP(((kobj_t)dev)->ops,iicbus_reset);
> + rc = ((iicbus_reset_t *) _m)(dev, speed, addr, oldaddr);
> + return (rc);
> +}
> +
> +/** @brief Unique descriptor for the IICBUS_TRANSFER() method */
> +extern struct kobjop_desc iicbus_transfer_desc;
> +/** @brief A function implementing the IICBUS_TRANSFER() method */
> +typedef int iicbus_transfer_t(device_t dev, struct iic_msg *msgs,
> + uint32_t nmsgs);
> +
> +static __inline int IICBUS_TRANSFER(device_t dev, struct iic_msg *msgs,
> + uint32_t nmsgs)
> +{
> + kobjop_t _m;
> + int rc;
> + KOBJOPLOOKUP(((kobj_t)dev)->ops,iicbus_transfer);
> + rc = ((iicbus_transfer_t *) _m)(dev, msgs, nmsgs);
> + return (rc);
> +}
> +
> +/** @brief Unique descriptor for the IICBUS_GET_FREQUENCY() method */
> +extern struct kobjop_desc iicbus_get_frequency_desc;
> +/** @brief A function implementing the IICBUS_GET_FREQUENCY() method */
> +typedef u_int iicbus_get_frequency_t(device_t dev, u_char speed);
> +
> +static __inline u_int IICBUS_GET_FREQUENCY(device_t dev, u_char speed)
> +{
> + kobjop_t _m;
> + u_int rc;
> + KOBJOPLOOKUP(((kobj_t)dev)->ops,iicbus_get_frequency);
> + rc = ((iicbus_get_frequency_t *) _m)(dev, speed);
> + return (rc);
> +}
> +
> +#endif /* _iicbus_if_h_ */
> diff --git a/rtemsbsd/local/iicbus_if.c b/rtemsbsd/local/iicbus_if.c
> new file mode 100644
> index 00000000..68099c34
> --- /dev/null
> +++ b/rtemsbsd/local/iicbus_if.c
> @@ -0,0 +1,76 @@
> +#include <machine/rtems-bsd-kernel-space.h>
> +
> +/*
> + * This file is produced automatically.
> + * Do not modify anything in here by hand.
> + *
> + * Created from source file
> + * freebsd-org/sys/dev/iicbus/iicbus_if.m
> + * with
> + * makeobjops.awk
> + *
> + * See the source file for legal information
> + */
> +
> +#include <sys/param.h>
> +#include <sys/queue.h>
> +#include <sys/kernel.h>
> +#include <sys/kobj.h>
> +#include <sys/bus.h>
> +#include <dev/iicbus/iic.h>
> +#include <rtems/bsd/local/iicbus_if.h>
> +
> +
> +static int iicbus_nosupport(void)
> +{
> +
> + return (ENODEV);
> +}
> +
> +static u_int
> +iicbus_default_frequency(device_t bus, u_char speed)
> +{
> +
> + return (100000);
> +}
> +
> +struct kobjop_desc iicbus_intr_desc = {
> + 0, { &iicbus_intr_desc, (kobjop_t)kobj_error_method }
> +};
> +
> +struct kobjop_desc iicbus_callback_desc = {
> + 0, { &iicbus_callback_desc, (kobjop_t)kobj_error_method }
> +};
> +
> +struct kobjop_desc iicbus_repeated_start_desc = {
> + 0, { &iicbus_repeated_start_desc, (kobjop_t)iicbus_nosupport }
> +};
> +
> +struct kobjop_desc iicbus_start_desc = {
> + 0, { &iicbus_start_desc, (kobjop_t)iicbus_nosupport }
> +};
> +
> +struct kobjop_desc iicbus_stop_desc = {
> + 0, { &iicbus_stop_desc, (kobjop_t)iicbus_nosupport }
> +};
> +
> +struct kobjop_desc iicbus_read_desc = {
> + 0, { &iicbus_read_desc, (kobjop_t)iicbus_nosupport }
> +};
> +
> +struct kobjop_desc iicbus_write_desc = {
> + 0, { &iicbus_write_desc, (kobjop_t)iicbus_nosupport }
> +};
> +
> +struct kobjop_desc iicbus_reset_desc = {
> + 0, { &iicbus_reset_desc, (kobjop_t)kobj_error_method }
> +};
> +
> +struct kobjop_desc iicbus_transfer_desc = {
> + 0, { &iicbus_transfer_desc, (kobjop_t)kobj_error_method }
> +};
> +
> +struct kobjop_desc iicbus_get_frequency_desc = {
> + 0, { &iicbus_get_frequency_desc, (kobjop_t)iicbus_default_frequency }
> +};
> +
>
More information about the devel
mailing list