[Pdbg] [PATCH 5/7] mem: Pass target class as argument to _getmem/_putmem
Amitay Isaacs
amitay at ozlabs.org
Mon Oct 28 12:46:38 AEDT 2019
On Mon, 2019-10-28 at 12:07 +1100, Alistair Popple wrote:
> On Thursday, 24 October 2019 12:48:45 PM AEDT Amitay Isaacs wrote:
> > This will allow different mem class (e.g. pba) to be supported.
> >
> > Signed-off-by: Amitay Isaacs <amitay at ozlabs.org>
> > ---
> > src/mem.c | 20 ++++++++++----------
> > 1 file changed, 10 insertions(+), 10 deletions(-)
> >
> > diff --git a/src/mem.c b/src/mem.c
> > index 2fe5918..b225047 100644
> > --- a/src/mem.c
> > +++ b/src/mem.c
> > @@ -81,7 +81,7 @@ static uint8_t *read_stdin(size_t *size)
> > return buf;
> > }
> >
> > -static int _getmem(uint64_t addr, uint64_t size, uint8_t
> > block_size, bool
> ci, bool raw)
> > +static int _getmem(const char *classname, uint64_t addr, uint64_t
> > size,
> uint8_t block_size, bool ci, bool raw)
> > {
> > struct pdbg_target *target;
> > uint8_t *buf;
> > @@ -95,7 +95,7 @@ static int _getmem(uint64_t addr, uint64_t size,
> > uint8_t
> block_size, bool ci, bo
> > buf = malloc(size);
> > assert(buf);
> >
> > - pdbg_for_each_class_target("mem", target) {
> > + pdbg_for_each_class_target(classname, target) {
>
> I plan to merge this on top of the backend patches you posted
> previously. The
> intent is that the environment (ie. the backend tree) would configure
> a default
> access method for memory, so by default I think this should still be
> operating
> on the "mem" class so that it picks up the correct virtual node.
>
> If a user (ie. the pdbg application) knows that it wants to use a
> particular
> access method (eg. pba) then I think it should find that specific
> target and
> pass that in to the library as the target instead. Although perhaps
> we need
> some way nice way of finding those? The class is supposed to
> represent the
> actual hardware type being accessed, rather than the access method
> itself.
Yeah, that's the real issue. We don't have a nice way of
differentiating between two memory class instances. We might need to
invent something else like "class", which supports that distinction.
>
> - Alistair
>
> > if (pdbg_target_probe(target) != PDBG_TARGET_ENABLED)
> > continue;
> >
> > @@ -129,21 +129,21 @@ static int _getmem(uint64_t addr, uint64_t
> > size,
> uint8_t block_size, bool ci, bo
> > static int getmem(uint64_t addr, uint64_t size, struct mem_flags
> > flags)
> > {
> > if (flags.ci)
> > - return _getmem(addr, size, 8, true, flags.raw);
> > + return _getmem("mem", addr, size, 8, true, flags.raw);
> > else
> > - return _getmem(addr, size, 0, false, flags.raw);
> > + return _getmem("mem", addr, size, 0, false, flags.raw);
> > }
> > OPTCMD_DEFINE_CMD_WITH_FLAGS(getmem, getmem, (ADDRESS, DATA),
> > mem_flags, (MEM_CI_FLAG, MEM_RAW_FLAG));
> >
> > static int getmemio(uint64_t addr, uint64_t size, uint8_t
> > block_size,
> struct mem_io_flags flags)
> > {
> > - return _getmem(addr, size, block_size, true, flags.raw);
> > + return _getmem("mem", addr, size, block_size, true, flags.raw);
> > }
> > OPTCMD_DEFINE_CMD_WITH_FLAGS(getmemio, getmemio, (ADDRESS, DATA,
> BLOCK_SIZE),
> > mem_io_flags, (MEM_RAW_FLAG));
> >
> > -static int _putmem(uint64_t addr, uint8_t block_size, bool ci)
> > +static int _putmem(const char *classname, uint64_t addr, uint8_t
> block_size, bool ci)
> > {
> > uint8_t *buf;
> > size_t buflen;
> > @@ -153,7 +153,7 @@ static int _putmem(uint64_t addr, uint8_t
> > block_size,
> bool ci)
> > buf = read_stdin(&buflen);
> > assert(buf);
> >
> > - pdbg_for_each_class_target("mem", target) {
> > + pdbg_for_each_class_target(classname, target) {
> > if (pdbg_target_probe(target) != PDBG_TARGET_ENABLED)
> > continue;
> >
> > @@ -181,14 +181,14 @@ static int _putmem(uint64_t addr, uint8_t
> > block_size,
> bool ci)
> > static int putmem(uint64_t addr, struct mem_flags flags)
> > {
> > if (flags.ci)
> > - return _putmem(addr, 8, true);
> > + return _putmem("mem", addr, 8, true);
> > else
> > - return _putmem(addr, 0, false);
> > + return _putmem("mem", addr, 0, false);
> > }
> > OPTCMD_DEFINE_CMD_WITH_FLAGS(putmem, putmem, (ADDRESS),
> > mem_flags,
> (MEM_CI_FLAG));
> >
> > static int putmemio(uint64_t addr, uint8_t block_size)
> > {
> > - return _putmem(addr, block_size, true);
> > + return _putmem("mem", addr, block_size, true);
> > }
> > OPTCMD_DEFINE_CMD_WITH_ARGS(putmemio, putmemio, (ADDRESS,
> > BLOCK_SIZE));
> >
>
>
>
Amitay.
--
Marriage is like pi - natural, irrational, and very important. - Lisa
Hoffman
More information about the Pdbg
mailing list