devicetree-compiler.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Gibson <david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org>
To: Simon Glass <sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
Cc: Devicetree Compiler
	<devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Benjamin Bimmermann <b.bimmermann-LWAfsSFWpa4@public.gmane.org>,
	Ulrich Langenbach
	<ulrich.langenbach-srmvecZYGfHobmly5n/iKBvVK+yQ3ZXh@public.gmane.org>
Subject: Re: [PATCH v4 4/5] Adjust libfdt.h to work with swig
Date: Fri, 10 Feb 2017 16:01:32 +1100	[thread overview]
Message-ID: <20170210050132.GF25381@umbus> (raw)
In-Reply-To: <20170205201323.15411-5-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 3747 bytes --]

On Sun, Feb 05, 2017 at 01:13:22PM -0700, Simon Glass wrote:
> There are a few places where libfdt.h cannot be used as is with swig:
> 
> - macros like fdt_totalsize() have to be defined as C declarations
> - fdt_offset_ptr() and fdt_getprop_namelen() need special treatment due to
>     a TODO in the wrapper for fdt_getprop()

fdt_offset_ptr() is a very low-level function which should be rarely
needed outside libfdt internals, even in C.  I think it makes sense to
exclude it from the Python interface.

fdt_getprop_namelen() is primarily to make certain things easier in C
where copying and slicing up strings can be quite painful.  Since
that's trivial in Python, I don't think there's any need to expose the
namelen() functions in Python.

> 
> The second one can hopefully be resolved by someone with more knowledge of
> SWIG than me.
> 
> Add #ifdefs to work around this problem.
> 
> Signed-off-by: Simon Glass <sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
> ---
> 
> Changes in v4:
> - Add new patch to adjust libfdt.h to work with swig
> 
> Changes in v3: None
> Changes in v2: None
> 
>  libfdt/libfdt.h | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h
> index c69e918..2e78754 100644
> --- a/libfdt/libfdt.h
> +++ b/libfdt/libfdt.h
> @@ -143,7 +143,9 @@
>  /* Low-level functions (you probably don't need these)                */
>  /**********************************************************************/
>  
> +#ifndef SWIG /* Use a special rule in libfdt.swig instead */
>  const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int checklen);
> +#endif
>  static inline void *fdt_offset_ptr_w(void *fdt, int offset, int checklen)
>  {
>  	return (void *)(uintptr_t)fdt_offset_ptr(fdt, offset, checklen);
> @@ -210,7 +212,7 @@ int fdt_next_subnode(const void *fdt, int offset);
>  /**********************************************************************/
>  /* General functions                                                  */
>  /**********************************************************************/
> -
> +#ifndef SWIG /* Repeated in libfdt.swig (we cannot use macros) */

You need to duplicate them in libfdt.swig, certainly, but why do you
need to explicitly cut them out here?  Isn't swig smart enough to know
it can't do anything with these?

>  #define fdt_get_header(fdt, field) \
>  	(fdt32_to_cpu(((const struct fdt_header *)(fdt))->field))
>  #define fdt_magic(fdt)			(fdt_get_header(fdt, magic))
> @@ -223,6 +225,7 @@ int fdt_next_subnode(const void *fdt, int offset);
>  #define fdt_boot_cpuid_phys(fdt)	(fdt_get_header(fdt, boot_cpuid_phys))
>  #define fdt_size_dt_strings(fdt)	(fdt_get_header(fdt, size_dt_strings))
>  #define fdt_size_dt_struct(fdt)		(fdt_get_header(fdt, size_dt_struct))
> +#endif /* SWIG */
>  
>  #define __fdt_set_hdr(name) \
>  	static inline void fdt_set_##name(void *fdt, uint32_t val) \
> @@ -638,8 +641,10 @@ const void *fdt_getprop_by_offset(const void *fdt, int offset,
>   * Identical to fdt_getprop(), but only examine the first namelen
>   * characters of name for matching the property name.
>   */
> +#ifndef SWIG /* Use a special rule in libfdt.swig instead */
>  const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,
>  				const char *name, int namelen, int *lenp);
> +#endif
>  static inline void *fdt_getprop_namelen_w(void *fdt, int nodeoffset,
>  					  const char *name, int namelen,
>  					  int *lenp)

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

  parent reply	other threads:[~2017-02-10  5:01 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-05 20:13 [PATCH v4 0/5] Introduce Python bindings for libfdt Simon Glass
     [not found] ` <20170205201323.15411-1-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2017-02-05 20:13   ` [PATCH v4 1/5] Add an initial Python library " Simon Glass
     [not found]     ` <20170205201323.15411-2-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2017-02-10  4:37       ` David Gibson
2017-02-10 18:39         ` Simon Glass
     [not found]           ` <CAPnjgZ31rZqoYTg4m=3yAFuT2UuL9i4qc4+w-G34Aq75sdfrfA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-02-13  5:20             ` David Gibson
2017-02-15 18:55               ` Ulrich Langenbach
2017-02-16  2:11                 ` David Gibson
     [not found]                   ` <20170216021123.GO12369-K0bRW+63XPQe6aEkudXLsA@public.gmane.org>
2017-02-27  7:21                     ` Ulrich Langenbach
2017-02-10  5:04       ` David Gibson
2017-02-05 20:13   ` [PATCH v4 2/5] Add tests for pylibfdt Simon Glass
     [not found]     ` <20170205201323.15411-3-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2017-02-10  4:56       ` David Gibson
2017-02-10 18:39         ` Simon Glass
2017-02-05 20:13   ` [PATCH v4 3/5] Mention pylibfdt in the documentation Simon Glass
     [not found]     ` <20170205201323.15411-4-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2017-02-10  4:58       ` David Gibson
2017-02-10 18:39         ` Simon Glass
2017-02-05 20:13   ` [PATCH v4 4/5] Adjust libfdt.h to work with swig Simon Glass
     [not found]     ` <20170205201323.15411-5-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2017-02-10  5:01       ` David Gibson [this message]
2017-02-10 18:39         ` Simon Glass
2017-02-05 20:13   ` [PATCH v4 5/5] Build pylibfdt as part of the normal build process Simon Glass
2017-02-10  5:05   ` [PATCH v4 0/5] Introduce Python bindings for libfdt David Gibson
2017-02-10 18:39     ` Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170210050132.GF25381@umbus \
    --to=david-xt8fgy+axnrb3ne2bgzf6laj5h9x9tb+@public.gmane.org \
    --cc=b.bimmermann-LWAfsSFWpa4@public.gmane.org \
    --cc=devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
    --cc=ulrich.langenbach-srmvecZYGfHobmly5n/iKBvVK+yQ3ZXh@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).