Ejemplo n.º 1
0
 void save_override(
         const ::boost::serialization::nvp< T > & t
     ){
     save_start(t.name());
     archive::save(* this->This(), t.const_value());
     save_end(t.name());
 }
Ejemplo n.º 2
0
 void save_override(
             #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
             const
             #endif
             ::boost::serialization::nvp<T> & t, int
     ){
     save_start(t.name());
     archive::save(* this->This(), t.const_value());
     save_end(t.name());
 }
Ejemplo n.º 3
0
static void __init setup_save(
	u32 *ptr, unsigned int *words_save, unsigned int *words_restore,
	u32 syncpt_id, u32 waitbase)
{
	const struct hwctx_reginfo *r;
	const struct hwctx_reginfo *rend;
	unsigned int save = SAVE_BEGIN_SIZE + SAVE_END_SIZE;
	unsigned int restore = RESTORE_BEGIN_SIZE + RESTORE_END_SIZE;

	if (ptr) {
		save_begin(ptr, syncpt_id, waitbase);
		ptr += SAVE_BEGIN_SIZE;
	}

	r = ctxsave_regs_3d;
	rend = ctxsave_regs_3d + ARRAY_SIZE(ctxsave_regs_3d);
	for ( ; r != rend; ++r) {
		u32 offset = r->offset;
		u32 count = r->count;
		switch (r->type) {
		case HWCTX_REGINFO_DIRECT:
			if (ptr) {
				save_direct(ptr, offset, count);
				ptr += SAVE_DIRECT_SIZE;
			}
			save += SAVE_DIRECT_SIZE;
			restore += RESTORE_DIRECT_SIZE;
			break;
		case HWCTX_REGINFO_INDIRECT:
			if (ptr) {
				save_indoffset(ptr, offset, 0);
				ptr += SAVE_INDOFFSET_SIZE;
				save_inddata(ptr, offset + 1, count);
				ptr += SAVE_INDDDATA_SIZE;
			}
			save += SAVE_INDOFFSET_SIZE;
			restore += RESTORE_INDOFFSET_SIZE;
			save += SAVE_INDDDATA_SIZE;
			restore += RESTORE_INDDATA_SIZE;
			break;
		case HWCTX_REGINFO_INDIRECT_OFFSET:
			if (ptr) {
				save_indoffset(ptr, offset, count);
				ptr += SAVE_INDOFFSET_SIZE;
			}
			save += SAVE_INDOFFSET_SIZE;
			restore += RESTORE_INDOFFSET_SIZE;
			continue; /* INDIRECT_DATA follows with real count */
		case HWCTX_REGINFO_INDIRECT_DATA:
			if (ptr) {
				save_inddata(ptr, offset, count);
				ptr += SAVE_INDDDATA_SIZE;
			}
			save += SAVE_INDDDATA_SIZE;
			restore += RESTORE_INDDATA_SIZE;
			break;
		}
		if (ptr) {
			memset(ptr, 0, count * 4);
			ptr += count;
		}
		save += count;
		restore += count;
	}

	if (ptr)
		save_end(ptr, syncpt_id, waitbase);

	if (words_save)
		*words_save = save;
	if (words_restore)
		*words_restore = restore;
	wmb();
}