blob: 006625efd1c6ae61ef5d9c1c7a81ebb7a15e47af [file] [log] [blame]
/*
* Copyright 2017 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can
* be found in the LICENSE file.
*
*/
#pragma once
//
//
//
#include "handle.h"
#include "scheduler.h"
//
// The requirement is that every grid struct begin with an skc_grid_t
//
typedef struct skc_grid * skc_grid_t;
typedef struct skc_grid_deps * skc_grid_deps_t;
//
//
//
typedef void (* skc_grid_pfn)(skc_grid_t const grid);
//
//
//
#define SKC_IS_GRID_INVALID(grid) (grid == NULL)
//
//
//
#define SKC_GRID_DEPS_ATTACH(deps,addr,data,waiting_pfn,execute_pfn,dispose_pfn) \
skc_grid_deps_attach(deps,addr,data, \
waiting_pfn,execute_pfn,dispose_pfn, \
#waiting_pfn,#execute_pfn,#dispose_pfn) \
//
//
//
skc_grid_deps_t
skc_grid_deps_create(struct skc_runtime * const runtime,
struct skc_scheduler * const scheduler,
skc_uint const handle_pool_size);
void
skc_grid_deps_dispose(skc_grid_deps_t const deps);
//
//
//
#ifndef NDEBUG
void
skc_grid_deps_debug(struct skc_grid_deps const * const deps);
#endif
//
//
//
skc_grid_t
skc_grid_deps_attach(skc_grid_deps_t const deps,
skc_grid_t * const addr,
void * const data,
skc_grid_pfn waiting_pfn, // upon READY > WAITING
skc_grid_pfn execute_pfn, // upon READY/WAITING > EXECUTING
skc_grid_pfn dispose_pfn, // upon EXECUTING > COMPLETE
char const * const waiting_name,
char const * const execute_name,
char const * const dispose_name);
#if 0
//
// Not using this yet -- needs to properly detach and reclaim a ready
// grid's resources
//
void
skc_grid_detach(skc_grid_t const grid);
#endif
//
//
//
void *
skc_grid_get_data(skc_grid_t const grid);
void
skc_grid_set_data(skc_grid_t const grid, void * const data);
//
//
//
void
skc_grid_map(skc_grid_t const grid, skc_handle_t const handle);
//
//
//
void
skc_grid_deps_force(skc_grid_deps_t const deps,
skc_handle_t const * const handles,
skc_uint const count);
void
skc_grid_deps_unmap(skc_grid_deps_t const deps,
skc_handle_t const * const handles,
skc_uint const count);
//
//
//
void
skc_grid_happens_after_grid(skc_grid_t const after,
skc_grid_t const before);
void
skc_grid_happens_after_handle(skc_grid_t const after,
skc_handle_t const before);
//
// should be called by host
//
void
skc_grid_start(skc_grid_t const grid);
void
skc_grid_force(skc_grid_t const grid);
//
// should be called by the scheduler
//
void
skc_grid_complete(skc_grid_t const grid);
//
//
//
#if 0
//
// delete when ready
//
skc_grid_t
skc_grid_move(skc_grid_t const grid,
skc_grid_state_e * const state,
skc_grid_t * const addr,
void * const data);
#endif
//
//
//